Java 插入排序-降序

Java 插入排序-降序,java,algorithm,sorting,insertion-sort,Java,Algorithm,Sorting,Insertion Sort,抱歉,如果这是一个基本问题 我只是想学习更多关于算法的知识 我编写了一个简单的代码来按升序执行插入排序,但由于某些原因,我无法按降序执行排序 我尝试将比较键(而(I>0&&a[I]>key)更改为(I>0&&a[I]0&&a[i]

抱歉,如果这是一个基本问题

我只是想学习更多关于算法的知识

我编写了一个简单的代码来按升序执行插入排序,但由于某些原因,我无法按降序执行排序

我尝试将比较键(而(I>0&&a[I]>key)更改为(I>0&&a[I] 一, 11 10 9 5. 4. 3. 二,

公共类插入排序{
公共静态void main(字符串参数[]){
int[]a={1,10,11,5,9,3,2,4};
//循环整个数组长度。
//数组中的元素,开始与进行比较
//第一要素
对于(int j=1;j0且key小于数组中的值时
//移动值并插入
//该值是适当的。
//系统输出println(j);
while(i>0&&a[i]
您永远都不会在

while (i > 0 && a[i] < key) {

按升序排序时也会出现同样的问题。

数组中的第一个元素是
a[0]
。您不能在任何地方对它进行比较。

从0开始,数组a[]到达第一个元素a[0]。因此[j]中的第一个元素将是[0],而不是[1];

公共静态void insertionSort(int[]arr)
public static void insertionSort(int[] arr)
    {
        for (int i = 1; i < arr.length; i++)
        {
            int curNumber = arr[i];
            int curIndex = i-1;
            while ( curIndex >= 0 && arr[curIndex] < curNumber)
            {
                arr[curIndex+1] = arr[curIndex];
                curIndex--;
            }
            arr[curIndex+1] = curNumber;
        }
    }
{ 对于(int i=1;i=0&&arr[curIndex]
抱歉..我的错误..我的测试数据错误,我没有意识到在执行升序时我没有接触数组中的第一个元素..如果我没有错,行a[I+1]不应该吗=键从while循环中出来?@Azeem算法的正确性无关紧要。为了效率,你是对的,它应该在while循环之后对数组进行更少的写入。@danielfetcher我的错,你是对的。我没有深入查看,我只是查看了一下,发现这里有问题。请不要只将代码作为回答,但也要解释你的代码是做什么的,以及它是如何解决问题的。带有解释的答案通常质量更高,更有可能吸引更多的选票。
while (i >= 0 && a[i] < key) {
public static void insertionSort(int[] arr)
    {
        for (int i = 1; i < arr.length; i++)
        {
            int curNumber = arr[i];
            int curIndex = i-1;
            while ( curIndex >= 0 && arr[curIndex] < curNumber)
            {
                arr[curIndex+1] = arr[curIndex];
                curIndex--;
            }
            arr[curIndex+1] = curNumber;
        }
    }