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

Using insertion sort to sort only part of array

我正在编写一个快速排序程序。部分快速排序涉及使用插入排序,但它只对特定范围的元素进行排序,因为快速排序会处理其余部分。我正在尝试模拟我的教科书提供的使用

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

但我正在努力弄清楚左右是如何使用的。下面是不使用参数 left 和 right 的插入排序代码:

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}

编辑:

在上面的例子中,左边是包容性的,右边是排他性的。如果要包含正确的索引,请将 p < right 更改为 p<= right。调用索引从 0 开始的方法时请记住。