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]);
}