【问题标题】:Using insertion sort to sort only part of array使用插入排序仅对数组的一部分进行排序
【发布时间】:2015-04-29 07:26:34
【问题描述】:

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

   public static void insertionSort(int a[], int left, int 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;
    }
}

如果我要添加 left 和 right 参数来帮助仅对数组的一部分进行排序,它们会应用在哪里?

感谢您的帮助。

【问题讨论】:

    标签: java quicksort


    【解决方案1】:

    在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 是排除的。如果要包含正确的索引,请将 p

    【讨论】:

    • 我会解释 left 和 right 是包含还是排除,并解释 left 和 right 是从零开始还是从一开始。
    • 感谢您的帮助。我试过这个,我遇到了一个小异常,而且它不太正确。我用 p
    • @Rainbolt 很高兴澄清。约翰是的,这就是rainbolt要我澄清的。很高兴你明白了。
    猜你喜欢
    • 2020-04-08
    • 2016-05-05
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    • 2017-08-18
    • 2021-06-10
    • 2019-07-15
    相关资源
    最近更新 更多