插入排序降序java
这是按升序执行insertionSort的代码。我正在尝试更改代码,以便它可以按降序排列。但每次我改变一些事情,情况就变得更糟。有人能给我指出正确的方向吗插入排序降序java,java,sorting,insertion-sort,Java,Sorting,Insertion Sort,这是按升序执行insertionSort的代码。我正在尝试更改代码,以便它可以按降序排列。但每次我改变一些事情,情况就变得更糟。有人能给我指出正确的方向吗 public static void insertionSort(Comparable[] list) { for (int index = 0; index < list.length; index++) { Comparable key = list[index]; int position = inde
public static void insertionSort(Comparable[] list)
{
for (int index = 0; index < list.length; index++)
{
Comparable key = list[index];
int position = index;
// Shift larger values to the right
while (position > 0 && key.compareTo(list[position-1]) < 0)
{
list[position] = list[position-1];
position--;
}
list[position] = key;
}
}
publicstaticvoidinsertionsort(可比[]列表)
{
for(int index=0;index0&&key.compareTo(列表[position-1])<0)
{
列表[位置]=列表[位置-1];
位置--;
}
列表[位置]=键;
}
}
我看不出你的代码有什么大问题。我要做的是用一个额外的参数来重载这个函数:一个比较器
(),用来代替自然的比较器
作为灵感,请看(java中的集合)
static void sort(List List,Comparator您当前的insertionSort()
函数的代码对于升序排序是正确的。这是一个很好的起点
我不知道为了制作降序版本您尝试了哪些更改。请下次包括这些信息,否则我们无法告诉您为什么它不起作用
要将函数更改为降序排序,请逐字更改单个字符:
// Sort-ascending version (current)
key.compareTo(list[position-1]) < 0
// Sort-descending version (proposed
key.compareTo(list[position-1]) > 0
//排序升序版本(当前)
键。比较(列表[position-1])<0
//降序排序版本(建议)
key.compareTo(列表[position-1])>0
我已经测试了此更改并确认其有效。希望这有帮助!您做了什么,什么更糟?您的比较器需要一个+1的案例。最简单的修复方法是返回o2.compareTo(o1)
。哇,这太简单了,我的想法太复杂了,试图改变while循环和小于号的条件,而不是仅仅一个,但非常感谢。
// Sort-ascending version (current)
key.compareTo(list[position-1]) < 0
// Sort-descending version (proposed
key.compareTo(list[position-1]) > 0