プロが教えるわが家の防犯対策術!

穴埋め問題ですが、for文の j -= k の考えで立ち止まります。
#include <stdio.h>

#define swap(X, Y) 【 1 】 ← X ^= Y, Y ^= X, X ^= Y

void shell(int x[ ], int n);

void main()
{
    int x[12] = {23, 67, 54, 82, 13, 28, 55, 61, 50, 32, 29, 44};
    int n = 12, i ;

    printf("配列(整列前)x => ");
    for( i = 0; i < n - 1; i++ )
        printf("%d, ",x[ i ]);
    printf("%d\n",x[ i ]);
 
    shell(x, n);

    printf("配列(整列後)x => ");
    for( i = 0; i < n - 1; i++ )
        printf("%d, ",x[ i ]);
    printf("%d\n",x[ i ]);
}

void shell(int x[ ], int n)
{
    int i, j, k = n ;

    while( 【 2 】 ){ ← k > 0
        【 3 】 ← k /= 2;
        for( i = 0; 【 4 】; i++)
            for( j = i; 【 5 】; j -= k)
             swap(x[j], x[j + k]);
    }
}

【 1 】【 2 】は自信があるのですが【 3 】はあまり自信がないです。
【 4 】と【 5 】はどうすれば出来ますか教えてください。お願いします。

A 回答 (1件)

while(k/2>0){ /* (2) */


k /= 2; /* (3) */
for(i=0;i+k<n;i++) /* (4) */
for(j=i;j>=0 && x[j]>x[j+k];j-=k) /* (5) */
swap(x[j],x[j+k]);
}
    • good
    • 0
この回答へのお礼

ありがとうございます。 参考になりました。
もっと勉強します。

お礼日時:2004/12/19 22:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!