「これはヤバかったな」という遅刻エピソード

数値をソートする方法にはバブルソートやクイックソートなどがあり
アルゴリズムは分かるのですが
文字列を五十音順にソートしたい場合にはどのようにしたら良いですか?


検索をかけてみたのですが、大抵プログラミング言語に備わったsortの方法が紹介されており
自分で処理を行う方法については書かれていません。


ExcelのSort機能を使わない方法で教えてください。

A 回答 (3件)

例えばバブルソートは


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という文字列比較関数もあります。
これらで間に合うようなら、使えばいいでしょう。
それで期待通りにならない場合は、比較関数を自作してみましょう。
    • good
    • 0

「五十音順にソート」というのが漢字交じりの文字列なら、簡単にはいきません。


たとえば単純なコード比較だと「恵子」(けいこ)は「恵」(めぐみ)の後ろになってしまいます。
一般的には、漢字→かな(ローマ字)変換プログラムの「KAKASI 」を使うと思いますが、同システムをクライアントかサーバかにインストールしなければなりません。
http://kakasi.namazu.org/index.html.ja

Windowsでの使用例は
http://hp.vector.co.jp/authors/VA041117/ja7uhv/K …

あたり
    • good
    • 1

アルゴリズムはわかると言うことであれば、別にどの方法をとってもいいと思います。


データ数が少ないと思いますので、速度を求める必要は無く、一番簡単な方法で良いかと。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報