我正在写一个快速程序。快速排序的一部分涉及使用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;
}
}
如果我要添加左右参数以帮助仅对数组的一部分进行排序,它们将应用于何处?
感谢您的帮助。
答案 0 :(得分:3)
在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,5,3,6,7,0},2,6)
示例输出:{3,2,3,5,6,8,6,7,0}
编辑:
在上面的示例中,left是包含的,right是exclusive。如果要包含正确的索引,请更改p&lt;对,p <=权利。在调用索引从0开始的方法时请记住。