• ベストアンサー

文字列をソートする方法

数値をソートする方法にはバブルソートやクイックソートなどがあり アルゴリズムは分かるのですが 文字列を五十音順にソートしたい場合にはどのようにしたら良いですか? 検索をかけてみたのですが、大抵プログラミング言語に備わったsortの方法が紹介されており 自分で処理を行う方法については書かれていません。 ExcelのSort機能を使わない方法で教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

例えばバブルソートは for j=0 to AMax  for i=1 to AMax-j   if A(i-1)>A(i) then    入れ替え   end if  next next 大体こんな感じですよね。 ここでは、大小比較に「>」を使っています。 ここで 「比較」 という関数を定義したとします。 比較(x,y) : x が yより「大きい」ときは 正の値、「等しい」なら0、 「小さい」なら負の値を返す これを使うと for j=0 to AMax  for i=1 to AMax-j   if 比較(A(i-1),A(i)) > 0 then    入れ替え   end if  next next と書けます。 さて 「大きい」「等しい」「小さい」 と「」付きで書いたのには理由があります。 後ろにくるべきものを「大きい」前にくるべきものを「小さい」と判定するように作れば、実は、実際の数値の大小以外にも使えるのです。 例えば 、x>y のとき 負、x<yのとき正 として作れば 実際には数の小さい方が「大きい」というということになり、その結果、逆順にソートされます。 この比較関数を使った方法は、他のアルゴリズムでも同様です。 > 文字列を五十音順にソートしたい場合 五十音順並べた時の大小関係を返す比較関数を用意しましょう。 いわゆる「辞書順」というのは (1) 1文字目同士比較する。 (2) 違いがあれば、(1)の比較結果が文字列同士の比較結果 (2-1) もし、どちらか一方だけが文字が無い場合は、短い方が「小さい」 (2-2) 両方との文字が無くなったら、「等しい」 (3) 2文字目、3文字目...について(1)から同様に確認 というアルゴリズムになっています。 一応、文字列も 不等号で比較できますし、 StrCompという文字列比較関数もあります。 これらで間に合うようなら、使えばいいでしょう。 それで期待通りにならない場合は、比較関数を自作してみましょう。

その他の回答 (2)

  • ballville
  • ベストアンサー率47% (233/487)
回答No.3

「五十音順にソート」というのが漢字交じりの文字列なら、簡単にはいきません。 たとえば単純なコード比較だと「恵子」(けいこ)は「恵」(めぐみ)の後ろになってしまいます。 一般的には、漢字→かな(ローマ字)変換プログラムの「KAKASI 」を使うと思いますが、同システムをクライアントかサーバかにインストールしなければなりません。 http://kakasi.namazu.org/index.html.ja Windowsでの使用例は http://hp.vector.co.jp/authors/VA041117/ja7uhv/KanjiToKana_CmdLine.html あたり

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.1

アルゴリズムはわかると言うことであれば、別にどの方法をとってもいいと思います。 データ数が少ないと思いますので、速度を求める必要は無く、一番簡単な方法で良いかと。

関連するQ&A