c 中的插入排序,需要更正
insertion sort in c , need correction
我正在尝试在 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;
}
谢谢。
排序正确,但您只是打印出了错误的内容。你不应该在排序过程中打印出来。实际上,代码只是打印出输入中遇到的每个键。相反,打印应该在 排序完成后 完成。也就是说,从当前 for
循环中删除 printf
并在排序完成后将其放入单独的 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]);
}
我正在尝试在 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;
}
谢谢。
排序正确,但您只是打印出了错误的内容。你不应该在排序过程中打印出来。实际上,代码只是打印出输入中遇到的每个键。相反,打印应该在 排序完成后 完成。也就是说,从当前 for
循环中删除 printf
并在排序完成后将其放入单独的 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]);
}