我的插入排序有什么问题



我已经浏览了一个小时的代码,但仍然无法弄清楚出了什么问题:

void insertionsort(List data) {
for (int i = 1; i < data.size(); i ++) {
number2 = (Comparable) data.get(i);
int holder = i-1;
while (holder > 0 && (number2.compareTo(data.get(holder)) < 0)) {
data.set(holder, data.get(holder-1));
holder-=1;
}
data.set(holder, number2);
}

代码中有几个错误。

  1. 循环从不检查列表中的第一项。检查 Java 中的holder > 0列表始终从索引 0 开始。当持有者设置为 0 时,while 循环永远不会运行。将其更改为holder>= 0将解决此问题。
  2. 切换错误的项目。您希望将number2与列表中它之前的所有内容进行比较。如果number2小于以前的项目,则需要切换之前的所有项目。holder已经指向number2之前的项目。这意味着您需要用holder+1中持有的任何内容来移动每个holder
  3. 插入number2.代码按原样,您将number2设置为比应有的位置少一个的位置。您需要将number2设置在适当的位置holder+1

我建议 https://www.geeksforgeeks.org/insertion-sort/检查插入排序的基础知识。

最新更新