n個の要素を持つ配列xをシェルソートで昇順に整列
穴埋め問題ですが、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 】はどうすれば出来ますか教えてください。お願いします。