Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
插入排序降序java_Java_Sorting_Insertion Sort - Fatal编程技术网

插入排序降序java

插入排序降序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

这是按升序执行insertionSort的代码。我正在尝试更改代码,以便它可以按降序排列。但每次我改变一些事情,情况就变得更糟。有人能给我指出正确的方向吗

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