• 締切済み

このプログラムの間違えって??

このクイックソートプログラムうまくいかないのですがどこかちがいますか?? quicksort(inta[], intl, intr){ intv, i, j, t; if (r > l) { v = a[r]; i = l-1; j = r; for (; ;) { while (a[++i] < v) ; while (a[--j] > v) ; if (i >= j) break; swap(&a[i],&a[j]); } swap(&a[i],&a[r]); quicksort(a, l, i-1); quicksort(a, i+1, r) } }

みんなの回答

回答No.5

No.1です。 No.3に追記 >このクイックソートプログラムうまくいかないのですがどこかちがいますか?? 「うまくいかない」といっている ・ソート前のデータ ・ソート後の結果 も提示してください。 関数の処理ではなく「関数の呼び方」や「結果の確認方法」というものも疑うべき項目です。

doora88
質問者

補足

回答ありがとうございます。 説明不足でした。 正しくは時々セグメントエラーが出るのです。 それで聞いてみたところイックソートプログラムがおかしいいわれたのですがどの辺がまずいのでしょうか?? 環境はUNIXです。

回答No.4

#2で回答した者です。 void swap( int* x, int* y ); void quicksort(int a[], int l, int r){ int v, i, j, t; if (r > l) { v = a[r]; i = l-1; j = r; for (; ;) { while (a[++i] < v) ; while (a[--j] > v) ; if (i >= j) break; swap(&a[i],&a[j]); } swap(&a[i],&a[r]); quicksort(a, l, i-1); quicksort(a, i+1, r); } } これにswap関数の定義を追加して、乱数を使ってテストしました。正しく動作しました。

回答No.3

No.1です。 >根本的に無理みたいなのですが何かおもいあたりませんか?? ですから、 >これを呼び出す元のプログラムも提示してください。 >それとswap()は開発環境の標準関数ですか? と回答しています。 思いつくのはそのあたりですから。

回答No.2

文法エラーがあります。 戻り値の型 void 変数宣言の型名と変数名の間の区切り文字 int a[], int l, int r 同じく int v 最後の式文の後のセミコロン quicksort(a, i+1, r); これを直して、swap関数を正しく作り、このquicksort関数を正しく引用すれば正しくソートできます。

doora88
質問者

補足

回答ありがとうございます。 文法はこちらの記述ミスです。 根本的に無理みたいなのですが何かおもいあたりませんか?? ちなみに値は乱数でとります

回答No.1

>うまくいかないのですがどこかちがいますか?? これを呼び出す元のプログラムも提示してください。 それとswap()は開発環境の標準関数ですか? 尚、提示ソースそのままなら、構文ミスでコンパイルすら通らないはずですよ。

関連するQ&A