• 締切済み

Double型ソート方法

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

みんなの回答

  • a-saitoh
  • ベストアンサー率30% (524/1722)
回答No.4

クイックソートは自作ですか? プログラムを間違えているからスタックが不足するのでしょう。 再帰呼び出しの際に、ソート対象のデータのコピーを渡しているとか。 クイックソートはインプレースソートなので、8191要素くらいでスタックが足りなくなることは考えにくいです。

すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.3

#1で示唆されている、再帰型(リカーシブな)のアルゴリスムを使っているからだと思います。 http://e-words.jp/w/E383AAE382ABE383BCE382B7E38396E382B3E383BCE383AB.html http://www.geocities.jp/kmctecyh/k_gozen/gozen03/gozenans0303.PDF にあるように 「リカーシブは、プログラムの中から自分自身を呼び出すことを言う。自分自身を定義するの に自分自身よりも1次低い集合を用いる。その部分集合はより低次の部分定義を用いて定義する ことを繰り返して表現する。 クィックソートは、適当にサンプリングして得られたデータNに着目し、N以下のデータ系 列とN以上のデータ系列に分割する。このデータNを軸(ピボット)という。データNを軸とし て、その軸の値より小さい要素は軸より前方へ、大きな要素は軸より後方へ振り分ける。適当な 長さの系列になるまで分割を繰り返し、それぞれの系列をソートすれば1つのソート済み系列と なる。 分割の繰返しに再帰呼び出し(リカーシブ)を利用した高速の整列法である。」 ーーー 質問者がどこかで見たアルゴリズムがリカーシブなものであったのでしょう。理系の先生のクイックソートの記述には、これが多そう。 しかしすぐ質問のような事態になるでしょう。戻った時の情報を 蓄えていかないとならないから。 どこか再帰を使わないクイックソートのアルゴリズムを見つけるしかないでしょう。 http://edu.inf.shizuoka.ac.jp/lecture/2007/X121/text/AandD_I0710.pdf に考え方とC言語の簡単例がある。 「再帰的でない クイックソート」などでWEB照会しては。

すると、全ての回答が全文表示されます。
  • don_go
  • ベストアンサー率31% (336/1059)
回答No.2

余計な作業領域を必要としない高速ソートとしては ↓が有ります。 コムソート(Comb Sort) http://www.ffortune.net/comp/slib/sort/combsort.htm

すると、全ての回答が全文表示されます。
  • t_nojiri
  • ベストアンサー率28% (595/2071)
回答No.1

プログラム知ってれば知ってると思うんですが、treeソートやクイックソートは最低でも比較対象の2倍はメモリ必要となります。 メモリが無い状態でソートするとなると、単純ソートやバブルソートとなりますが、決してこれらのソートは速いとは言えません。 とはいえ、スタック領域が不足なんて、このくらいのデータ量で出るのか?と思い少し調べました。 http://www.drk7.jp/MT/archives/000995.html

すると、全ての回答が全文表示されます。

関連するQ&A