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

时间:2015-01-25 22:13:01

标签: c arrays insertion-sort

我正在尝试在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;
    }
}

1 个答案:

答案 0 :(得分:0)

问题出在你的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;
    }
}