- ベストアンサー
配列に入っている値のソート
str(1)="bbb" str(2)="aaa" str(3)="ddd" str(4)="eee" str(5)="ccc" という配列があるとします。 これを昇順にソートさせて、 str(1)="aaa" str(2)="bbb" str(3)="ccc" str(4)="ddd" str(5)="eee" とさせたいのですが、どのようにすればよろしいでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
ソートアルゴリズムにクイックソートでよいならば http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/vb_t06.htm
その他の回答 (3)
Private Sub コマンド0_Click() Dim S(5) As String S(0) = "" ' <--- 必須 S(1) = "bbb" S(2) = "aaa" S(3) = "ddd" S(4) = "eee" S(5) = "ccc" QSort S(), 0, 5 Debug.Print S(1) Debug.Print S(2) Debug.Print S(3) Debug.Print S(4) Debug.Print S(5) End Sub [イミディエイト] aaa bbb ccc ddd eee このように何らかのソート関数を使うと良いと思います。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> <html> <title>クイックソート</title> <meta http-equiv="Content-script-Type" content="type"> <script type="text/javascript"> function qsort(v, left, right) { var i, last; if (left >= right) return; swap(v, left, Math.round((left + right) / 2)); last = left; for (i=left + 1; i <= right; i++) if (v[i] < v[left]) swap(v, ++last, i); swap(v, left, last); qsort(v, left, last - 1); qsort(v, last + 1, right); } function swap (v, i, j) { var temp; temp = v[i]; v[i] = v[j]; v[j] = temp; } </script> <body> <script> <!-- var v = new Array("10","20","11","19","12","18","13","17","14","16","15"); qsort(v, 0, 10); for (i = 0; i < 11; i++) document.write(v[i], "<br/>"); //--> </script> </body> </html> これは、「プログラミング言語C」162頁に紹介されているクイックソートです。 ところで、冒頭のVB版の文字列用のクイックソートでは StrComp関数を使っています。 ' 左から比較する Do I = I + 1 Loop While (StrComp(Datas(I), Part) = -1) ' 右から比較する Do J = J - 1 Loop While (StrComp(Datas(J), Part) = 1)
お礼
ご回答ありがとうございます。 参考にさせて頂きます。
- noah7150
- ベストアンサー率46% (116/251)
ソートには幾つかの手法があります 構文を書いてしまうと勉強にならないので言葉で 手法1. 配列の1と2を比較して2が小さければ入れ替える 次に2と3を、3と4を..最後まで終わればもう一度1と2を 繰り返し中に入れ替えが起こらなければソート完了。 これだとループは1から配列最大-1までと その上に入れ替えが起こったかのフラグの判断の無限ループ 手法2. 配列1と2から5を比較し小さければ入れ替える 配列2と3から5を比較し小さければ入れ替える その繰り返し かな
お礼
ご回答ありがとうございます。 参考にさせて頂きます。
- ProKaseifu
- ベストアンサー率51% (98/192)
VB.NETならこれで。 System.Array.Sort(str)
お礼
ご回答ありがとうございます。 参考にさせて頂きます。
お礼
ご回答ありがとうございます。 参考にさせて頂きます。