0

我无法找出这段代码中的错误,这段代码没有错误,但没有给出正确的结果。

#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;
}
4

2 回答 2

1

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

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

如果你编写代码,你应该知道它是如何以及做什么的。你为什么要j > 0在那个while循环中写,j甚至没有在循环中递减?

于 2013-02-16T08:24:53.427 回答
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您都应该在进入循环之前检查它。希望这可以帮助。

于 2013-02-16T08:56:27.210 回答