我已经浏览了一个小时的代码,但仍然无法弄清楚出了什么问题:
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);
}
代码中有几个错误。
- 循环从不检查列表中的第一项。检查 Java 中的
holder > 0
列表始终从索引 0 开始。当持有者设置为 0 时,while 循环永远不会运行。将其更改为holder>= 0
将解决此问题。 - 切换错误的项目。您希望将
number2
与列表中它之前的所有内容进行比较。如果number2
小于以前的项目,则需要切换之前的所有项目。holder
已经指向number2
之前的项目。这意味着您需要用holder+1
中持有的任何内容来移动每个holder
- 插入
number2
.代码按原样,您将number2
设置为比应有的位置少一个的位置。您需要将number2
设置在适当的位置holder+1
我建议 https://www.geeksforgeeks.org/insertion-sort/检查插入排序的基础知识。