【问题标题】:Insertion Sort algorithm not working as expected插入排序算法未按预期工作
【发布时间】:2015-06-26 10:52:33
【问题描述】:

我的插入排序代码是:

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 并在 while 循环主体中将 A[j] 替换为 A[i+1],代码会生成正确的结果。 A[j]和key和A[j]和A[i+1]之间有什么区别吗?

【问题讨论】:

  • 相关,你的意思是正确的吗?
  • 是的。我没有得到预期的结果

标签: java sorting insertion-sort


【解决方案1】:

正确代码:

    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]和key或者A[j]和A[i+1]有区别吗?

当然。插入排序算法的重点在于,它将当前元素与左侧所有大于它的元素进行交换。想象它就像重新排列你手中的牌一样。在您的原始版本中,j 固定在内部循环中,不会发生重新排列。

【讨论】:

  • 哦,是的。那是什么愚蠢的问题。我们需要将每个数字与键进行比较,并且在我的代码中我分配了 A[j]=A[i] ,这反过来又继续只比较单个数字。 :) 非常感谢代码和解决方案 :)
猜你喜欢
  • 1970-01-01
  • 2016-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-23
  • 2016-02-27
相关资源
最近更新 更多