- 締切済み
V.B.に特化した文字列の整列方法と整列方法の自動選択
小さくはない配列の整列で 通常法(本来の名称忘却) http://oshiete1.goo.ne.jp/kotaeru.php3?q=209365内回答 No3 for k=j to i を For k=j+1 to iに変更 クイックソート http://www.ne.jp/asahi/protech/hiroaki/programing/vb.html シェルソート http://www5d.biglobe.ne.jp/~tomoya03/shtml/algorithm/SSort.htm ループ変数を倍精度整数型に,配列を文字配列に,変数名を自分の使っている命名法に 再帰参照回数を減らすように,末尾も含めて整列されるように変更 文字列を SortDt$(N&)=Str$(Rnd(1)) で指定し 富士通 FMV Diskpower S3 20 (Win 95+VB6.0(V.S), 購入直後の状態)で実行した結果, 約30秒間(V.B. Timer関数で測定)で,クイックソート,シェルソート,通常法で実行可能回数が Visual Basic 6.0 SP3 コンパイラ n&=3 208943, 209490, 248245 n&=10 114149, 138935, 215415 n&=30 47967, 39833, 163284 n&=100 14118, 8353, 83524 n&=300 3913, 2064, 30516 n&=1000 987, 414, 9750 n&=3000 281, 105, 3348 n&=10000 68, 21, 947 となり,大型コンピューター(Fotran)で過去に経験しているクイックソート,シェルソートの利点を得られませんでした。 又,上記表はn&が対数目盛でほぼ等間隔になるように選択しました。n&に対する整列時間の変化が過去に報告されている内容とは異なります。したがって,整列に関する過去の経験は使えません。 大型コンピューターでは,クイックソートよりも早い整列方法が発表される等の研究が進んでいます。 おそらく Visual Basic 6.0 用に特化した整列方法があるかと思いますが,ご存知の方いらっしゃいませんか。 整列方法の自動選択(Win95で表示ルーチンの自動選択をマイクロソフトで行なっていましたから)を考えています。 関係情報をご存知の方いらっしゃいませんか。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- tsukasa-12r
- ベストアンサー率65% (358/549)
- imogasi
- ベストアンサー率27% (4737/17070)
- tsukasa-12r
- ベストアンサー率65% (358/549)
- you-m
- ベストアンサー率58% (190/327)
お礼
つたない私のソフト作成に皆様のご助力をいただきありがとうございました。 現在主流となっているであろうNET系ソートルーチンの作成につきましては他の質問にあるようにクイックソート等の利点が使えるようです。また回答いただきました皆様の手法が私の環境では使えないという結果が得られました。 VB+Win95に特化したルーチンをご存知の方がいらっしゃるかも知れないと思いひたすら待ちました。 しかし質問後半年以上過ぎた12月になっても追加の回答がありませんでした。 Visual Basic + Windows 95の環境下では高速化を可能とする手法をご存知の方がいらっしゃらないということがわかりました。 通常法で数百程度のデータ数ですと十分高速です。ディスクキャッシュが効いている状態では外部記憶装置の影響をほとんど考慮する必要がないようです。通常法+外部配列+ファイルマージという手法で乗り切ることにしました。
補足
ご指摘のサイトの内容から、再度行いました。結果として. 質問文のクイックソートよりも1-2割遅い。 「何かおかしい」点は移植時に変更されている(<=, >= を <, >に)ので、私の結果では現れなかった。 となりました。 MS-Basic(Ms-dos6.20, ペンテ200MHZ, 配列宣言の制限から1-300個で比較)では、回答にあったような速度変化が観察されました。ですから.ソフト作成における間違いはないかと思います。 Win95に関係した何かがあるように思われます。