C 中的插入排序未正确迭代数组

Insertion sort in C not iterating over the array correctly

我试图在 C 中实现插入排序,但它没有正确地遍历数组。我正在尝试实现 Cormen 的算法书中的伪代码。

看起来第一个元素被忽略了,但所有其他元素都被跳过了,所以我想这是我的索引的问题。然而,即使有 gdb 和一些细心的观察,我还是想念它。

如果你们不介意快速浏览一下这段代码,我将不胜感激。

#include <stdio.h>

void insertion_sort(int *array);

int main(void)
{
    /* 6 is a constant length of the array */
    /* could be replaced with a variable, etc in real-scenario */
    int array[6] = {5, 2, 4, 6, 1, 3};
    insertion_sort(array);

    for (int i = 0; i < 6; i++) {
        printf("%d: %d\n", i, array[i]);
    }

    return 0;
}

void insertion_sort(int *array)
{
    int j, i, key;
    for (j = 1; j < 6; j++) {
        key = array[j];
        i = j - 1;
        while (i > 0  && array[i] > key) {
            array[i+1] = array[i];
            i -= 1;
        }
        array[i+1] = key;
    }
}

问题出在您的 while 循环中。应该是这样的:

void insertion_sort(int *array)
{
    int j, i, key;
    for (j = 1; j < 6; j++) {
        key = array[j];
        i = j - 1;
        while (i >= 0  && array[i] > key) {
            array[i+1] = array[i];
            i -= 1;
        }
        array[i+1] = key;
    }
}