使用插入排序仅对数组的一部分进行排序

时间:2015-04-28 23:09:04

标签: java 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;
    }
}

如果我要添加左右参数以帮助仅对数组的一部分进行排序,它们将应用于何处?

感谢您的帮助。

1 个答案:

答案 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开始的方法时请记住。