插入排序C代码无法正常工作,它只排序前两个元素

时间:2013-02-16 08:08:09

标签: c algorithm insertion-sort

我无法弄清楚此代码中的错误,此代码没有错误但是没有给出正确的结果。

#include <stdio.h>

int main(int argc, const char *argv[])
{

    int a[10], n, i, j, k, value_to_insert, hole_pos;
    printf("Enter the total no: of elements in an array");
    scanf("%d", &n);


    for (i = 0; i < n; i++) {
        scanf("%d", &a[i]);
    }

    for (j = 1; j <= n; j++) {
        value_to_insert=a[j];
        hole_pos=j;

        while (j > 0 && value_to_insert < a[hole_pos - 1]) {
            a[hole_pos]=a[hole_pos-1];
            hole_pos=hole_pos-1;
        }

        a[hole_pos] = value_to_insert;
    }

    printf("Sorted Array \n");
    for (k = 0; k < n; k++)
        printf("%d\n", a[k]);

    return 0;
}

2 个答案:

答案 0 :(得分:1)

而不是循环条件j <= n应该有j < n

而不是j > 0应该有hole_pos > 0

如果你编写代码,你应该知道代码的作用和方式。为什么你会在while循环中写j > 0,当j甚至没有在循环中递减时?

答案 1 :(得分:0)

该行有错误 for (j = 1; j <= n; j++) value_to_insert=a[j]; 当j的值等于n时,您将越过数组的边界。 所以它应该是 for (j = 1; j < n; j++)value_to_insert=a[j];

另一个错误就在于该行 while (j > 0 && value_to_insert < a[hole_pos - 1])

此处条件j>0始终为真,因为j从1开始。 该行应写为

while (hole_pos > 0 && value_to_insert < a[hole_pos - 1])

每次递减hole_pos时,都应该在进入循环之前检查它。希望这会有所帮助。