java - 我的插入排序有什么问题?

标签 java algorithm sorting insertion-sort

我正在尝试使用基于插入的排序算法对大型数据文件进行排序,代码运行正常但输出不正确。我反复研究它完全没有用,任何人都可以看到我哪里出错了吗?

public void sort(Comparable[] items) {
    for (int i = 1; i < items.length; i++) {
        Comparable temp = items[i];
        int j = i - 1;
        while (j >= 0 && items[j].compareTo(items[j]) > 0) {
            items[j + 1] = items[j];
            j = j - 1;
        }
        items[j] = temp;
    }
}

我生成的示例数据文件是...

2
1
3
5
9
6
7
4
8

显然输出应该是 1,2,3,4... - 但我得到的是 1 3个 5个 9 6个 7 4个 8个 8

最佳答案

items[j].compareTo(items[j]) 应该是 items[j].compareTo(temp),否则你只是将项目与本身 - 您需要将其与要插入的对象进行比较。

然后 items[j] = temp; 也会导致 ArrayIndexOutOfBoundsException 因为在循环结束时,items[j]小于 tempj == -1,因此我们需要在其后的位置插入 - 最简单的修复方法就是将其更改为 items[ j+1] = temp;.

关于java - 我的插入排序有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22222388/

相关文章:

javascript - 根据自定义排序顺序数组对 JSON 进行排序

sorting - 在 Elasticsearch 中使用文档值从因子对象获取特定键

java - 为什么私有(private)内部类中的变量无法从 Get 中的 AsynC 回调方法获取具有值的私有(private)变量的值?

java - 我应该如何本地化数据库中始终必须为英文的系统字符串?

java - 如果语句不适用于 JTextfield 到字符串的比较

algorithm - 递归与堆栈

java - 更改 jTableHeader 的字体和背景颜色

algorithm - 是否有任何同步算法/引用可用于同步目录?

algorithm - 在有向图中使用 DFS 进行循环检测是否绝对需要回溯?

java - 使用 java Collections.sort() 对 List<List<Integer>> 进行排序