アルゴリズムの書籍より、それを参考にC言語で配列内の数値でシェルソートを試しています。シェルソートでは、一定の間隔ごとにグループわけしてソートしていきますが、いま作っているのは、配列内に16個の数値データを用意して半分をグループとし、以降も半分半分と狭めていくようにします。
下記のように書きましたが、どうしても動かないのですが、エラーの表示もなく、原因が分からないので、もし気付きましたらアドバイスいただきたいと思います。
sort_shell.c
//シェルソート #include<stdio.h> void Sort(int num[ ], int n, int start, int span); void Show(int num[ ], int n); int main(void) { int a[] = {16, 8, 15, 7, 14, 6, 13, 5, 12, 4, 11, 3, 10, 2, 9, 1}; int n = 16; int start; //グループの先頭要素 int span ; //グループの要素間隔 for (span = n/2; n >0; span=span/2){ for (start = 0; start < span; start++){ Sort(a, n, start, span); } } Show(a, n); return 0; } void Sort(int num[ ], int n, int start, int span) { int tmp; int i, j; for (i = start; i < n-span; i=i+span){ for (j = i+span; j < n; j=j+span){ if(num[i] < num[j]){ tmp = num[i]; num[i] = num[j]; num[j] = tmp; } } } } void Show(int num[ ], int n) { while (n--) printf("%d ", *num++); printf("\n"); }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/20 06:15