#include <stdio.h>
#include <stdlib.h>
int main()
{
int i, j, key, p;
int A[] = {1, 3, 2, 4, 9, 8, 7};
for (j=1; j<7; j++){
key = A[j];
//insert A[j] into the sorted sequence
i = j-1;
while(i>0 && A[i]>key){
A[i+1] = A[i];
--i;
}
A[i+i] = key;
}
for(i=0; i<7; ++i){
printf("%d ", A[i]);
}
return 0;
}
上面提到的代码应该执行插入排序,但是,我得到了不需要的排序,只有很少的重复值。我似乎无法弄清楚我哪里出错了。
答案 0 :(得分:3)
你有一个错字。
A[i+i] = key;
应该是
A[i+1] = key;
此外,您还有一个未使用的变量p
答案 1 :(得分:2)
您的插入排序有两个错误。第一个是Arun A. S指出的。
A[i+1] = key;
代替A[i+i] = key;
while(i>=0
代替while(i>0
答案 2 :(得分:1)
您需要稍微修改一下代码(错误A[i+i] = key;
不是唯一的问题)
i = j ;
while(i>0 && A[i-1]>key){
A[i] = A[i-1];
--i;
}
A[i] = key;
我保留了条件while(i>0
并更改了偏移量,但您可以保留它们并改为仅更改此行while(i>=0
。