ソートのアルゴリズム

解決


にゃんこ  2005-10-18 10:05:16  No: 126365  IP: [192.*.*.*]

質問させてください。今プログラムの勉強をしているのですが、数字の並べ替えを行うプログラムを作成しようと思ってます。しかし並べ方の考え方がよくわからないので教えていただきたく書き込みしました。
例  5→9→7→4→2
        ↓並べ替え
    2→4→5→7→9

編集 削除
いな  2005-10-18 10:22:56  No: 126366  IP: [192.*.*.*]

ソートのアルゴリズムなんてものは、
探せば出てくるかと思うのですが・・・。

「VB  クイックソート」でGoogle検索
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/vb_t06.htm

こういったキーワード(というほど、
今回は特殊なキーワードを使っているつもりはありませんが)で、
探せることも、プログラミングを学ぶ上で重要なスキルです。

#質問を書くよりもよほど早く解決します。

編集 削除
にゃんこ  2005-10-18 14:24:15  No: 126367  IP: [192.*.*.*]

私の書き方が悪かったと思うのですが、クイックソートとかではなく、For文を使って並べ替えをおこなうプログラムを作成しています。
ソートのアルゴリズムでいろんなところを探しましたが、これといったサイトがなかったし、書いてあることが難しくてよく理解できませんでした。
でもほかの掲示板で丁寧に教えてもらったので解決しました。

編集 削除
いな  2005-10-18 15:33:06  No: 126368  IP: [192.*.*.*]

>私の書き方が悪かったと思うのですが、
ですね。ソート・{アルゴリズム} VBでググれば

・バブルソート 
・バケットソート(ビンソート) 
・基数ソート 
・ヒープソート 
・マージソート(併合ソート) 
・クイックソート 

といったこれらメジャーなアルゴリズムならば
即サンプルが見つかります。
#その他の手法でやりたいのであれば、もっと説明をすべきです。

編集 削除
まるち  2005-10-18 16:02:32  No: 126369  IP: [192.*.*.*]

>でもほかの掲示板で丁寧に教えてもらったので解決しました。
エライ捨て台詞ですな

編集 削除
我龍院忠太  2005-10-18 16:14:54  No: 126370  IP: [192.*.*.*]

>クイックソートとかではなく、For文を使って並べ替えをおこなうプログラムを作成しています。
クイックソートもFor文を使ってます。
と言うかForを使わないソートは見たことが無い。
クイックソートは通常、再帰を使ってるので、初学者には難解かも。
バブルソートならアルゴリズムは簡単、しかも安定。

>でもほかの掲示板で丁寧に教えてもらったので解決しました。
ほかの掲示板ってどこだろ?

編集 削除
いな  2005-10-18 16:21:17  No: 126371  IP: [192.*.*.*]

もう、いいじゃないか。
マルチ君にそこまで求めるのは無駄

編集 削除
名無し  2005-10-18 16:54:30  No: 126372  IP: [192.*.*.*]

ソートがしたいって言うからソートの仕方を教えてくれたのに、それに対して意味不明な逆切れするくらいならここに来なければいいのになぁ

ひとりごと、ひとりごと

編集 削除
我龍院忠太  2005-10-18 17:11:57  No: 126373  IP: [192.*.*.*]

>もう、いいじゃないか。
>マルチ君にそこまで求めるのは無駄
同感ではあるが、掲示板はマルチ君だけが見てるわけではないので、
出来ることなら少しでも完結したいと思って・・・

編集 削除
ななし  2005-10-18 17:24:32  No: 126374  IP: [192.*.*.*]

>出来ることなら少しでも完結したいと思って・・・

ん〜、じゃこれを解決案として、

[クイックソート]については先にいな さんがあげたレス中のURL
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/vb_t06.htm
より、Public Sub QSort(d() As Variant, l As Variant, r As Variant)
を参照?すればOKぽい

そう有意味ではソートのやり方は一応解決かな?

編集 削除
ガッ  2005-10-18 18:18:10  No: 126375  IP: [192.*.*.*]

> 私の書き方が悪かったと思うのですが、クイックソートとかではなく、For文を使って並べ替えをおこなうプログラムを作成しています。
> ソートのアルゴリズムでいろんなところを探しましたが、これといったサイトがなかったし、書いてあることが難しくてよく理解できませんでした。
> でもほかの掲示板で丁寧に教えてもらったので解決しました。
私も、貴方が書いてあることが難しくてよく理解できませんでした。

で、ソートについて。
コムソート:
http://www.ffortune.net/comp/slib/sort/combsort.htm

編集 削除
通りすがり  2005-10-18 19:04:25  No: 126376  IP: [192.*.*.*]

でわ、

「隣接法」と「逐次ソーティング法」
http://kone.vis.ne.jp/program/

編集 削除
いな  2005-10-18 19:08:15  No: 126377  IP: [192.*.*.*]

なんか面白そうなので、一つのっておくかな

「シェルソート」
http://www5d.biglobe.ne.jp/~tomoya03/shtml/algorithm/SSort.htm

編集 削除
名無し  2005-10-19 06:56:46  No: 126378  IP: [192.*.*.*]

質問者がいなくなったら一気に有意義な良スレになったねw

編集 削除
いな  2005-10-19 12:56:28  No: 126379  IP: [192.*.*.*]

>有意義な良スレ

過去ログ検索用に補完
「バブルソート」
http://www5d.biglobe.ne.jp/~tomoya03/shtml/algorithm/BSort.htm

「基本挿入法」
http://www5d.biglobe.ne.jp/~tomoya03/shtml/algorithm/SbSort.htm

「クイックソート」
http://www5d.biglobe.ne.jp/~tomoya03/shtml/algorithm/QSort.htm

「その他(文字列ソート)」
http://www5d.biglobe.ne.jp/~tomoya03/shtml/algorithm/StrSorts.htm

編集 削除
我龍院忠太  2005-10-19 16:49:04  No: 126380  IP: [192.*.*.*]

クイックソート
      平均的に最も速いとされている、件数が多い場合や二分する時バランスが悪いと
      大量のスタックを使用し、スタックオーバーフローを引き起こす可能性がある。
      安定でない。Cで書くと実の美しいコードとなる、再帰の勉強には最適。

ヒープソート
      クイックソートの約2倍の時間を要する、スタックを使わない。安定でない。                  

バブルソート
      アルゴリズムがきわめて簡単、ソートの勉強には良いかも。遅い、安定である。

ディスリビューションソート
       配列を使用する、高速、安定である。

基数ソート
      各桁ごとのソートを行っていく、アルゴリズムは簡単、速度?、安定である。

挿入ソート
      殆ど整列しているデーターに対しては極めて高速、安定である。
      アルゴリズムは簡単、リソースを殆ど使わない。

選択ソート
      1番小さな値を見つけて先頭に置いていく、アルゴリズムは簡単、遅い、安定である。

マージソート
      高速、ただしデーターと同じ程度のメモリーが必要、安定。  

まだまだたくさん有るがはて何がお勧めなのか。
スタックオーバーフローだけは避けたいのでクイックソートで大まかに並べておいて
挿入ソートを行うのが速そう。

*「安定」とはキーが同じ場合、データーを並べ替えないことを言う。

編集 削除
通りすがり  2005-10-19 17:47:56  No: 126381  IP: [192.*.*.*]

みんな、かなり素敵

編集 削除