英語の sort って単語はコンピューターの世界では大きい順とか小さい順に並べ替えるという意味で使う。Excel なんかを使ってる人ならピンとくるだろう。Windows を使ってる人はDOS窓なんてのは滅多に使わないというかその存在すら知らない人も多いだろう。でも俺はよく使う。DOS窓で使うコマンドに sort というのがあるんだけど、これの処理結果がダメな場合があるのを見つけた。
簡単な検索プログラムを作ろうとしてたんだけど、ただ先頭から順に探すのでは芸が無いので二分検索法にした。この検索法はバイナリー・サーチとも呼ばれるが、検索回数が少ない。しかし検索対象が順番に並んでないといけない。対象データは文字だったので並べ替えにDOS窓の sort コマンドを使った。で、ちゃんと検索出来るかどうか試してみたら幾つか出来ないのがあった。変だなぁってことで調べてるうちに順番に並んでないといけないはずのものが一部間違っていた。
ダメな場合というのは半角文字の _(アンダースコア)が含まれている時だった。例えば_と1では1の方が先に来るはずなのに来ない。ちなみにもう捨てようかなぁと思ってるPC-DOS(≒MS-DOS)がインストールされてるノートPCで久々に実行してみると、こちらの sort コマンドは正しい。少なくとも Windows 2000 と Windows XP の sort コマンドは正しく動かない場合がある。恐らくユニコードだとかそういう処理を入れた副作用なんだろう。よく分らないけど半角文字で比較してないってことなんだろうな。
他の文字はどうか調べるのは厄介だろうなぁと思いつつ試してみたら意外な事が分った。次の表がその結果の一部で、左列が並べ替え前の元の文、中列が Windows の sort 後、右列が Linux(リナックス) の結果。このデータでは PC-DOS も Windows と同じだった。
初めて使った sort コマンドは UNIX(ユニックス)なんだけど、その結果は上表右列の Linux のと同じはず。PC-DOS でも Windows でも名前が同じコマンドなので結果も同じもんだとずっと思っていた、というより違うなんて事は考えたことも無かった。ちなみに Linux は文字コード順に並べ替えてるが Microsoft の sort は辞書順のようだけど、名前が同じで処理が違うってのは頂けない。なんでこんな風に思い込んだかというと、MS-DOS は Unix に似せて作ってるからだ。
簡単な検索プログラムを作ろうとしてたんだけど、ただ先頭から順に探すのでは芸が無いので二分検索法にした。この検索法はバイナリー・サーチとも呼ばれるが、検索回数が少ない。しかし検索対象が順番に並んでないといけない。対象データは文字だったので並べ替えにDOS窓の sort コマンドを使った。で、ちゃんと検索出来るかどうか試してみたら幾つか出来ないのがあった。変だなぁってことで調べてるうちに順番に並んでないといけないはずのものが一部間違っていた。
ダメな場合というのは半角文字の _(アンダースコア)が含まれている時だった。例えば_と1では1の方が先に来るはずなのに来ない。ちなみにもう捨てようかなぁと思ってるPC-DOS(≒MS-DOS)がインストールされてるノートPCで久々に実行してみると、こちらの sort コマンドは正しい。少なくとも Windows 2000 と Windows XP の sort コマンドは正しく動かない場合がある。恐らくユニコードだとかそういう処理を入れた副作用なんだろう。よく分らないけど半角文字で比較してないってことなんだろうな。
他の文字はどうか調べるのは厄介だろうなぁと思いつつ試してみたら意外な事が分った。次の表がその結果の一部で、左列が並べ替え前の元の文、中列が Windows の sort 後、右列が Linux(リナックス) の結果。このデータでは PC-DOS も Windows と同じだった。
並べ替え前 | Windowsのsort | Linuxのsort |
---|---|---|
a | A | A |
b | a | B |
c | B | C |
d | b | D |
A | c | a |
B | C | b |
C | d | c |
D | D | d |
初めて使った sort コマンドは UNIX(ユニックス)なんだけど、その結果は上表右列の Linux のと同じはず。PC-DOS でも Windows でも名前が同じコマンドなので結果も同じもんだとずっと思っていた、というより違うなんて事は考えたことも無かった。ちなみに Linux は文字コード順に並べ替えてるが Microsoft の sort は辞書順のようだけど、名前が同じで処理が違うってのは頂けない。なんでこんな風に思い込んだかというと、MS-DOS は Unix に似せて作ってるからだ。
※コメント投稿者のブログIDはブログ作成者のみに通知されます