質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

2回答

1588閲覧

[C] シェルソート

xjaPANDA

総合スコア124

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2016/07/05 00:52

アルゴリズムの書籍より、それを参考に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"); }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

for文の条件式がおかしい。

C

1for (span = n/2; n >0; span=span/2){

nは16の固定値なのでいつまで経ってもfor文が終わりません。

C

1for (span = n/2; span > 0; span /= 2){

投稿2016/07/05 07:58

PineMatsu

総合スコア3579

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xjaPANDA

2016/07/20 06:15

ありがとうございます。おっしゃるとおり、n である部分がspanでなくてはだめでした。これでかなりはまってしまっていたので、感謝します。
guest

0

最初のfor文のループ条件のnが固定値のまま変化しないからでは。

投稿2016/07/05 01:22

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xjaPANDA

2016/07/20 06:16

ありがとうございます。その通りでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問