- ベストアンサー
配列に入っている値のソート
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" とさせたいのですが、どのようにすればよろしいでしょうか?
- brhmn
- お礼率63% (103/162)
- Visual Basic
- 回答数4
- ありがとう数5
- みんなの回答 (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)
お礼
ご回答ありがとうございます。 参考にさせて頂きます。
関連するQ&A
- ArrayListに多次元配列
ArrayListに多次元配列の変数を格納したのですが、取り出し方がわからず困っています。 ----------------------------------------------- String[][] str = {{"aaa","bbb","ccc","ddd","eee","fff"}, {"aaa","bbb","ccc","ddd","eee","fff"}, }}; ArrayList array = new ArrayList(); array.add(str[0]); array.add(str[1]); ----------------------------------------------- 上記の場合で、str[0][2];を取得する方法がわかりません。 java初心者なのでおかしな質問かもしれませんが、宜しくお願いします。
- ベストアンサー
- Java
- 集まり単位?でのソート
FreeBSDに PostgreSQL7.4.6 + Apache + php4.3.10で色々と試していますが データソートのSQLについて悩んでいます 【テーブル(test)】 code name 1001 aaa 1002 bbb 2001 ccc 2002 ddd 3001 eee 4001 fff 【希望】 codeの4桁目基本にグループわけし、 各グループ単位で希望の順番(1,3,4,2)に並べたい グループ内は残り3桁の昇順で並べたい 【希望結果】 1001 aaa 1002 bbb 3001 eee 4001 fff 2001 ccc 2002 ddd
- ベストアンサー
- PostgreSQL
- 配列のソート
教えていただけますか? 一つの配列にサイズの異なるオブジェクトがいくつか入っています。 もう一方にもサイズの異なるオブジェクトがいくつか入っています。 双方の配列内のオブジェクトは同一ではありません。 しかしサイズが同一の異なるオブジェクトが対として入っています。 双方配列内のオブジェクトを同じサイズの順番で並ぶように、片方の配列の順番を並べ替えるにはどのようなアルゴリズムがよいのでしょうか? よろしくお願いします。 例 配列A (aaa:size5) (bbb:size3) (ccc:size2) (ddd:size9) 配列B (ppp:size9) (qqq:size3) (rrr:size2) (sss:size5) を 配列A (aaa:size5) (bbb:size3) (ccc:size2) (ddd:size9) 配列B (sss:size5) (qqq:size3) (rrr:size2) (ppp:size9)
- ベストアンサー
- その他(プログラミング・開発)
- 2次元配列のソート
下記3つの2次元配列を個人コードをキーとして昇順に新しい2次元配列Dへ格納する場合、どのようなやり方が最も速く出来るでしょうか? ご教授願います。 出来ればサンプルプログラムなど書いて頂けると非常にありがたいです。 A vntArray(0,0)=001・・・個人ID vntArray(0,1)=aaa・・・個人コード vntArray(0,2)=田中・・・氏名 vntArray(1,0)=005 vntArray(1,1)=eee vntArray(1,2)=中村 B vntArray(0,0)=003 vntArray(0,1)=ccc vntArray(0,2)=菊地 C vntArray(0,0)=002 vntArray(0,1)=bbb vntArray(0,2)=阿部 vntArray(0,0)=004 vntArray(0,1)=ddd vntArray(0,2)=川上
- ベストアンサー
- Visual Basic
- ある項目(数値)に加算したものでソートしたい。
ある項目(数値)に加算したものでソートしたい。 下のようなテーブルがあります。 そのpointに加算した結果でソートしたいのですが、可能でしょうか? テーブル name | point ああAAA| 100 ああBBB| 400 いいCCC| 300 ううDDD | 200 おおCCC| 500 ============== ふつうにORDER BY point DESC でソートすると下記のようになります。 おおCCC| 500 ああBBB| 400 いいCCC| 300 ううDDD | 200 ああAAA| 100 ============== そこでpointに加算した結果(dbには反映させず、あくまで表示上のみ) name[ *CCC]にはpointに80%加算 いいCCC 300→540 おおCCC 500→900 ソート結果 おおCCC| 900 いいCCC| 540 ああBBB| 400 ううDDD | 200 ああAAA| 100 ============== このような事は可能でしょうか?
- 締切済み
- MySQL
- 2つの列を合わせてソートしたい。
2つの列を合わせてソートしたい。 table名:test 【name】 【area】 【ground】 【bldg】 aaa 3 65.12 84.94 bbb 1 24.6 35.14 ccc 3 112.58 114.5 ddd 2 54 83.14 eee 4 89.25 41 fff 3 74.5 99.10 「ground」と「bldg」はfloat型で、整数と小数点の数値が入っています。 やりたいことは「ground」と「bldg」の2つの列で数値が大きい順でソートしたい。 SELECT * FROM `test` ORDER BY `ground` DESC,`bldg` DESC; こうすると、当たり前な話ですが、「ground」でソートされた後に「bldg」でソートされてしまいます。 そうではなくて、「ground」と「bldg」を合わせて、ソートしたいのです。 【求める実行結果】 【name】 【area】 【ground】 【bldg】 ccc 3 112.58 114.5 fff 3 74.5 99.10 eee 4 89.25 41 aaa 3 65.12 84.94 ddd 2 54 83.14 bbb 1 24.6 35.14 色々と試してみましたが、うまくいかず前に進まない状態です。 何かいい解決法をご存知の方がいらっしゃいましたらご教授お願い致します。
- ベストアンサー
- MySQL
- 正規表現で一つ目の区切り文字で区切りたいのですが・・・
aaa/bbb/ccc/ddd aaa/bbb/ccc/ddd/eee aaa/ccc/ddd $a=~/(.*)\/(.*)/; $1はそれぞれ aaa/bbb/ccc aaa/bbb/ccc/ddd aaa/ccc と成ってしまいます。 このように 「最後の/」で分けられてしまいます。 一つ目の/で分けるにはどうしたらよいでしょうか。
- ベストアンサー
- Perl
- Excelの関数に詳しい方、お願いします。
わかりづらい説明かもしれませんが、よろしくお願いします。 例として、 AAA*BBB*CCC*DDD*EEE*FFF AAA*BBB*CCC*DDD*EEE*FFF AAA*BBB*CCC*DDD*EEE*FFF AAA*BBB*CCC*DDD*EEE*FFF AAA*BBB*CCC*DDD*EEE*FFF ・ ・ ・ といった文字列がエクセルの先頭列A1~A100までずらりと並んでいるとします。 各アルファベットには任意の数字(日付など)が入るとして、この並んだ百件のデータからCCCの部分の最大値を表示するための適切な関数があれば教えていただけないでしょうか? 現在少々急いでいるため言葉足らずで申し訳ありませんが、よろしくお願いいたします.
- ベストアンサー
- オフィス系ソフト
- 別シートの値を検索して一致したものを合計する
excelvba初心者です。 お手数おかけします。 難問なのかどうかもよく分からず。。困っています。 シート1 シート2 シート3 AAA 100 AAA 50 BBB 20 BBB 200 CCC 150 CCC 30 DDD 300 QQQ 250 DDD 10 EEE 400 WWW 350 RRR 40 上記の値を決められた順番に別シートに集計したい(その時に、値を1/10にしたい) シート4 AAA 150 BBB 220 CCC 180 DDD 310 EEE 400 FFF 0 GGG 0 www 350 findでAAAを検索し見つかった値を ifにて条件分岐させるものをつくったものの プロシャーシーが大きすぎと言われてできません。 どなたか教えていただけないでしょうか。
- ベストアンサー
- 洗濯機
お礼
ご回答ありがとうございます。 参考にさせて頂きます。