我正在尝试在C中创建插入排序。我们在学校使用了以下代码,但它无效。
#include <stdio.h>
#include <conio.h>
int main(int argc, char const *argv[])
{
int a[6] = {5,8,3,2,9,1};
int i,j, key;
int countArraySize = sizeof(a)/sizeof(int);
for (i = 0; i < countArraySize; ++i)
{
key = a[i];
j = i - 1;
while( j>=0 && key < a[j]) {
a[j+1] = a[j];
j--;
}
a[j+1] = key;
printf("%d\n", a[j+1]);
}
return 0;
}
感谢。
答案 0 :(得分:2)
排序是正确的,但你只是打印出错误的东西。您不应该在排序期间打印出来。实际上,代码只是打印出输入中遇到的每个键。相反,打印应在排序完成后完成。也就是说,从当前printf
循环中删除for
,并在排序完成后将其放入单独的for
循环中:
for (i = 0; i < countArraySize; ++i) {
key = a[i];
j = i - 1;
while( j>=0 && key < a[j]) {
a[j+1] = a[j];
j--;
}
a[j+1] = key;
/* FOLLOWING LINE REMOVED */
/* printf("%d\n", a[j+1]); */
}
/* ADDED THIS BLOCK TO PRINT THE SORTED ARRAY */
for (i = 0; i < countArraySize; ++i) {
printf("%d\n", a[i]);
}