プロが教えるわが家の防犯対策術!

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

A 回答 (4件)

クイックソートは自作ですか?


プログラムを間違えているからスタックが不足するのでしょう。
再帰呼び出しの際に、ソート対象のデータのコピーを渡しているとか。

クイックソートはインプレースソートなので、8191要素くらいでスタックが足りなくなることは考えにくいです。
    • good
    • 0

#1で示唆されている、再帰型(リカーシブな)のアルゴリスムを使っているからだと思います。


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

余計な作業領域を必要としない高速ソートとしては


↓が有ります。
コムソート(Comb Sort)
http://www.ffortune.net/comp/slib/sort/combsort. …
    • good
    • 0

プログラム知ってれば知ってると思うんですが、treeソートやクイックソートは最低でも比較対象の2倍はメモリ必要となります。



メモリが無い状態でソートするとなると、単純ソートやバブルソートとなりますが、決してこれらのソートは速いとは言えません。

とはいえ、スタック領域が不足なんて、このくらいのデータ量で出るのか?と思い少し調べました。
http://www.drk7.jp/MT/archives/000995.html
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!