1
#include <stdio.h>
#include <conio.h>

int main() 
{

    int a[6] = {5,2,4,6,1,3};
    int j,i,k,cnt=1;
    for (j=1;j<7;j++)
    {
        k = a[j];
        i = j-1;
        while(i>0 && a[i]>k)
        {
            a[i+1] = a[i];
            i = i-1;
        }
        a[i+1] = k;
    }
    for(i=0;i<6;i++) 
    {
        printf("\n Final op %d",a[i]);
    }
    getch();
}

静的配列でいくつかの要素を渡しますが、値である最初の要素

a[0]は並べ替えられませんが、からの残りの値は並べ替えa[1]られますa[5]

4

2 に答える 2

3

問題>0

while(i>0 

これは読む必要があります

while(i>=0 

また、に未定義の動作があります

    k = a[j];

いつj==6

于 2013-01-06T09:40:42.460 に答える
0
while(i>-1 && a[i]>k)
        {
           a[i+1] = a[i];
           i = i-1;
        }

この変更のみを行うと、挿入ソートが完全に機能します。

配列はa[0]から始まり、whileはa [0]で終了するため、ソートされません。そのため、その要素にアクセスしません。

お役に立てば幸いです

于 2013-01-06T09:40:01.060 に答える