插入排序算法无法按预期工作

时间:2015-06-26 10:52:34

标签: java sorting insertion-sort

我的插入排序代码是:

class insertionsort
{
    public static void main(String s[])
    {
        int []A={12,5,8,87,55,4};
        int []R=sort(A);
        for(int i=0;i<A.length;i++)
        {
            System.out.println(R[i]);
        }
    }
    static int[] sort(int A[])
    {
        int key,i,j;
        for(j=1;j<A.length;j++)
        {
            key=A[j];
            i=j-1;
            while(i>=0 && A[j]<A[i])
            {
                A[j]=A[i];
                i--;
            }
            A[i+1]=key;
        }
        return A;
    }
}

但结果不正确。但是,如果我在while循环条件中将A[j]替换为key而将A[j]替换为A[i+1],则代码会生成正确的结果。 A[j]key以及A[j]A[i+1]之间是否存在差异?

1 个答案:

答案 0 :(得分:2)

正确的代码:

    static void sort(int A[])
    {
         for(int j = 1; j < A.length; j++)
         {
            int key = A[j];
            int i = j;
            while(i > 0 && A[i-1] > key)
            {
                A[i] = A[i-1];
                i--;
            }
            A[i] = key;
         }
    }

请注意,由于方法本身更改了输入数组,因此您不必返回任何内容。

  

问: A [j]和密钥或A [j]和A [i + 1]有什么区别吗?

当然。插入排序算法的重点是它将当前元素与左侧的所有元素进行交换。想象一下,它就像在你手中重新排列卡片一样。在原始版本中,j在内循环中得到修复,重新排列不会发生。