我的插入排序代码是:
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]
之间是否存在差异?
答案 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
在内循环中得到修复,重新排列不会发生。