簡體   English   中英

使用插入排序僅對數組的一部分進行排序

[英]Using insertion sort to sort only part of array

我正在寫一個quicksort程序。 快速排序的一部分涉及使用insertionsort,但它只對一定范圍的元素進行排序,因為quicksort處理其余元素。 我正在嘗試模仿我的教科書提供的方法

   public static void insertionSort(int a[], int left, int right)

但我正在努力弄清楚左右使用的方式。 這是insertionsort代碼,不使用左右參數:

public static void insertionSort(int a[], int left, int right) {
    int j;
    for (int p = 1; p < a.length; p++) {
        int tmp = a[p];
        for(j = p; j > 0 && tmp < a[j - 1]; j--) {
            a[j] = a[j-1];
        }
        a[j] = tmp;
    }
}

如果我要添加左側和右側參數以幫助僅排序數組的一部分,它們將應用於何處?

謝謝您的幫助。

在for循環聲明中使用left和right:

public static void insertionSort(int a[], int left, int right) {
    int j;
    for (int p = left; p < right; p++) {
        int tmp = a[p];
        for(j = p; j > 0 && tmp < a[j - 1]; j--) {
            a[j] = a[j-1];
        }
        a[j] = tmp;
    }
}

示例輸入:insertionSort({3,2,6,5,8,3,6,7,0},2,6)

示例輸出:{3,2,3,5,6,8,6,7,0}

編輯:

在上面的例子中,left是包含的,right是exclusive。 如果要包含正確的索引,請將p <right更改為p <= right。 調用索引從0開始的方法時請記住。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM