[英]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.