在我的插入排序程序中找不到错误
Can't find the bug in my insertion sort program
#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;
}
上述代码应该执行插入排序,但是,我得到的排序结果不理想,只有很少的重复值。我似乎无法弄清楚我哪里出错了。
你打错了。
A[i+i] = key;
应该是
A[i+1] = key;
此外,您还有一个未使用的变量p
您需要对代码稍作修改(拼写错误 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
。
你的插入排序有两个错误。第一个由 Arun A. S. 指出
A[i+1] = key;
而不是 A[i+i] = key;
while(i>=0
而不是 while(i>0
#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;
}
上述代码应该执行插入排序,但是,我得到的排序结果不理想,只有很少的重复值。我似乎无法弄清楚我哪里出错了。
你打错了。
A[i+i] = key;
应该是
A[i+1] = key;
此外,您还有一个未使用的变量p
您需要对代码稍作修改(拼写错误 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
。
你的插入排序有两个错误。第一个由 Arun A. S. 指出
A[i+1] = key;
而不是A[i+i] = key;
while(i>=0
而不是while(i>0