【问题标题】:How to Insertion Sort?如何进行插入排序?
【发布时间】:2020-08-01 23:57:37
【问题描述】:

缺少什么?

少一点 快搞定了

还有没有办法让它更快? 谢谢

public class InsertionSort {
    public static void main(String[] argv) {
        int[] data = {4, 1, 7, 8, 9, 3, 2};
        sort(data);
        for (int i = 0; i < data.length; i++) {
            System.out.println(data[i]);
        }
    }
    public static void sort(int[] data) {
        int j, pivot;
        // insert data[i] to sorted array 0 ~ i - 1
        // begins from i = 1, because if the array has only one element then it must be sorted.
        for (int i = 1; i < data.length; i++) { 
            pivot = data[i];
            for (j = i - 1; j >= 0 && data[j] > pivot; j--)  // shift data[j] larger than pivot to right
            {               
                data[j+1] = data[j];
            }
        }
    }
}

【问题讨论】:

  • 您可以使用O(n*log(n)) 算法(如快速排序)使其更快。
  • 您能否展示实际输出以及您期望发生的情况?

标签: java sorting insertion-sort


【解决方案1】:

当您在 data[j+1] 和 data[j] 之间交换值时,您的代码有问题。您覆盖 data[j+1] 中的值,而不是将其保存在时间变量中并将其放入 data[j] 中。

public class InsertionSort {
    public static void main(String[] argv) {
        int[] data = {4, 1, 7, 8, 9, 3, 2};
        sort(data);
        for (int i = 0; i < data.length; i++) {
            System.out.println(data[i]);
        }
    }

    public static void sort(int[] data) {
        int tmp, pivot;
        // insert data[i] to sorted array 0 ~ i - 1
        // begins from i = 1, because if the array has only one element then it must be sorted.
        for (int i = 1; i < data.length; i++) {
            pivot = data[i];
            for (int j = i - 1; j >= 0 && data[j] > pivot; j--)  // shift data[j] larger than pivot to right
            {
                tmp = data[j + 1];
                data[j + 1] = data[j];
                data[j] = tmp;
            }
        }
    }
}

正如@dan1st 建议的那样,如果您想要更好的性能,请尝试使用快速排序。快速排序算法及其 Java 实现的一个很好的解释,你可以找到 here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 2019-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-13
    相关资源
    最近更新 更多