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