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 <= nj < n

代わりにj > 0あるはずですhole_pos > 0

コードを書く場合、それがどのように、そして何をするかを知っている必要があります。ループ内でデクリメントさえされていないのに、なぜj > 0while ループに書き込むのでしょうか?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 に答える