java - 我的插入排序逻辑似乎是正确的,但不起作用

标签 java sorting insertion-sort

我正在尝试实现插入排序。

public int[] insertionSort(int[] a) {

    for(int i=0; i<a.length;i++) {
        int j=i+1;

        while(a[j] < a[i] && j < a.length) {
            swap(a[j],a[i]);
            j--;
            i--;
        }
    }
    return a;
}

public void swap(int a, int b) {
    int temp;
    temp = a;
    a = b;
    b = temp;
}

从技术上讲,这是否与我说 j = i-1 并在 while 循环中从 j < a.length 替换为 j >= 0 的条件相同(就输出结果而言)?

最佳答案

您无法以这种方式交换另一个方法中的值,因为参数传递的是值,而不是对值的引用。

您可能最好不要使用单独的方法进行交换,如下所示(还必须递增而不是递减 ij 值):

public int[] insertionSort(int[] a) {
    int temp;

    for(int i=0; i<a.length;i++) {
        int j=i;

        while(j > 0 && a[j-1] > a[j]) {
            temp = a[j];
            a[j] = a[j-1];
            a[j-1] = temp;
            j--;
        }
    }
    return a;
}

编辑:必须再次更新 - while 循环中的条件顺序错误,因此它会在检查是否已到达数组末尾之前查找数组的下一个索引.

编辑 2:正如评论中提到的,我将展示如何编写一个实际有效的 swap 方法 - 而不是传递您必须传递的值整个数组并在之后返回它。我仍然可能建议按照上述方式进行操作,但仅用于教育目的:

public int[] insertionSort(int[] a) {

    for(int i=0; i<a.length;i++) {
        int j=i;

        while(j > 0 && a[j-1] > a[j]) {
            a = swap(a, j-1, j);
            j--;
        }
    }
    return a;
}


public int[] swap(int[] a, int index1, int index2) {
    int temp = a[index1];
    a[index1] = a[index2];
    a[index2] = temp;
    return a;
}

编辑3:正在做一些愚蠢的事情并且没有完全给出插入排序。现在全部排序(请原谅双关语)。

关于java - 我的插入排序逻辑似乎是正确的,但不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24599684/

相关文章:

java - 如何在java中为GUI设置正确的布局

java - Java 中的快速排序算法排序不正确(第一个元素作为枢轴)

java - 滚动时 ListView 中的项目顺序错误

algorithm - 自主解迷宫机器人与故障路径排序

algorithm - 通过每次从 N 个列表中选择一个数字来从 N 个列表中找到第 k 个最大数字的高效算法

Java:检查同一类的两个对象是否具有相同的值

c# - 根据 JSON 对象属性对 jquery DataTables 进行排序 - 使用正交数据

java - 快速排序/插入排序组合比快速排序慢?

java - 如何根据字符串java中的一个单词对链接列表进行排序

c - 使用链表在C中进行插入排序