• ベストアンサー

クイックソートで・・・

C言語で再帰を利用してクイックソートを書いたのですが、データ数が大きくなるとプログラムが途中で終了してしまいます。これってスタック領域がなくなってしまったからでしょうか?お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

>スタックチェックやスタックサイズの指定は >どのようにするのですか? それは、コンパイラによって異なります。 大抵のコンパイラで cc /? cc -? cc --help cc -h cc などでコンパイラオプションを表示することができます。

inayou
質問者

お礼

ありがとうございました。

その他の回答 (2)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

多分スタックでしょうね。 コンパイラのスイッチでスタックチェックを付加したり あるいは、スタックサイズを指定できると思うので、 そのように、チェックするか、必要なスタックサイズを確保して下さい。

inayou
質問者

お礼

ありがとうございます。 ところでスタックチェックやスタックサイズの指定は どのようにするのですか?

  • goma_2000
  • ベストアンサー率48% (62/129)
回答No.1

プログラムがあっているとして。 エラーメッセージになんと出たのか判りませんが、多分そうでしょうね。エラーメッセージにスタックオーバーフローのようなメッセージは出てないですか? 他には、データが大きすぎて配列に収まりきらないをいうことも考えられますが、これだとメモリエラーになりセグメンテーションフォルトでおちるかな? クイックソートは末尾再帰で書けるので、ForやWhileのloopに直せば解決するのではないでしょうか。

inayou
質問者

お礼

ありがとうございます。試してみます。

関連するQ&A

  • クイックソート

    クイックソートには再帰を使わない方がいいんですか? 再帰を使わないとすると明示的にスタックで管理することになると思うのですが,整列させたい要素数がバラバラの時はどのようにすればよいですか?

  • クイックソートのプログラム

    『n個のデータを配列a[0],a[1],...,a[n-1]に読み込んでおき、クイックソートで降順に並べ替えるプログラムを作る。』 という問題が出ているのですが、C言語初心者の私には全くわからなくて困ってます。 このプログラムを教えてください!お願いします!

  • Double型ソート方法

    お世話になります。 VB初心者ですが宜しくお願いします。 ソートについてなのですが、Double型の配列(要素数8191)をソートしたいのですが処理が早いソート方法はあるのでしょうか。 クイックソートで試してみたのですがスタック領域が不足しています。 とのエラーメッセージが表示され処理が停止します。 スタック領域を消費しないソート方法などあればご教授宜しくお願いします。

  • クイックソートでソート数が1個や2個でも正しくソートできるのでしょうか?

    使用上意味がないのですが、クイックソートでソート数が1個や2個でも正しくソートできるのでしょうか? 引数に quick_sort( a[], 0, n - 1 )と、n-1となっているために nは0は無理そうですが、n=1なら0でうまくいくかなと思うのですが、 原理上、どうなっているのでしょうか? 詳しい方教えて下さい。 http://www.daccho-it.com/program/algo/quick.c

  • クイックソート

    N個のデータを降順に並び替えるプログラムをクイックソートで書きたいのですがよく分かりません。アルゴリズムの部分をどなたか教えてください。できれば詳しい説明もお願いします。

  • アプレットのクイックソート分割について教えて下さい

    JAVA アプレットでクイックソートの基本的な仕組みである分割についてのアプレットを作成したく色々と調べているのですが,再帰呼び出しを使ってソートするクイックソートの情報は沢山あるですが, 中央値を用いて中央値より大きいグループAと中央値よりも小さいグループBというように二つのグループに分ける分割のアプレットのサンプルプログラムは探していますが見つかりません. 分割について詳しいかたがいましたら情報を下さい, 宜しくお願いします.

  • ソートに関する質問です

    C言語でのプログラム作成の課題が解けなくて困っています。 バブルソートを使って、1000000個の整数データを昇順に並べ替えるプログラムを作成するというものです。 自分なりに作成したプログラムは、mallocでデータを格納する動的領域を確保して、後はシンプルにバブルソートの処理を行っています。 データ数が5,6万程度なら正常な動作が確認できるのですが、それより大量のデータ数だと、処理に時間が掛かりすぎるせいか、もしくは処理しきれずに動かなくなってしまったのか分かりませんが、プログラムの処理がいつまでたっても終わりません。 おそらくバブルソートの2重ループのあたりで、膨大な処理になってしまうのだと思うのですが、この問題についての改善策をどなたかご教授いただけませんでしょうか。

  • シェルソート,クイックソート

    シェルソートは比較数が小さいとクイックソートよりも早いですが,なぜでしょうか?

  • クイックソートの再帰呼び出し後の記述について(特に配列の範囲)

    アルゴリズムをすこしかじってみているのですが、いきなり躓いてしまいました。詳しい方にお聞きします。クイックソートの再帰呼び出し後のプログラムの記述がよくわかりません。(特に配列の範囲) QuickSort(Head,Tail)というプログラムがあるとします。最初の一連の処理が終わり、再帰呼び出しの部分で、 QuickSort(Head,Left-1)という前半部分を指定した再帰呼び出しとQuickSort(Right+1,Tail)という後半部分を指定した再帰呼び出しがされるとします。ここまでは分かるのですが、この再帰呼び出しのプログラムの実行を記述するとなるとどうなるのでしょうか?特に分からないのはこの再帰呼び出しでさらに再帰呼び出しされるQuickSortのカッコ内の配列の範囲がどのようになるのか、何か特別な記述はされるのかということです。あとソートの必要のないレベルまで来た場合の処理(記述)も分かりません。どなたかご教授願えないでしょうか?

  • バブルソートとクイックソート

    まだソートについて勉強し始めたばかりですが バブルソートは対象の総数が増えるとそれに伴い比較回数は増加するのに対し クイックソートはそれほど増加しないのはなぜでしょうか?? 検索してみてもプログラムが書いてあってよくわからないので... 根本的なところなのでしょうがどなたか教えてください!

専門家に質問してみよう