[PHP-users 15479]Re: ユーザー定義の比較関数により値で配列をソートする方法(usort)について

Reiji Matsumoto matsumoto @ spline.oc.to
2003年 5月 26日 (月) 01:17:15 JST


Matsumoto @ Spと申します。


> やりたかったことは
> Array
> (
>     [0] => 5    http://www.yahoo.co.jp/?6732    yahoo
>
>     [1] => 5    http://google.co.jp    google
>
>     [2] => 1    http://www.example.net    example - Home
>
>     [3] => 64    http://www.hoge.to    hoge
>
> )
>
> を、usortで
>
> Array
> (
>     [0] => 64    http://www.hoge.to    hoge
>
>     [1] => 5    http://google.co.jp    google
>
>     [2] => 5    http://www.yahoo.co.jp/?6732    yahoo
>
>     [3] => 1    http://www.example.net    example - Home
> )
>
> とする事でした。

うちの環境では上記のようにソートされます。

print_r($example);

を実行した時、どのように出力されるのですか?


> 元配列データをもっとたくさんにして
> 使用関数の頭で 引数を 出力して見ましたが
> 複雑な順番で処理をしているようです。
> ぱっと見た限りではどのような規則性なのか私には理解できませんでした。
> ですから 必ず逆転するという規則ではないようです。
> # ソースもみてません。

一般にこの手の関数の実装は、多くの処理系でクイックソートが利用
されるようです。ソースを見てみましたが、やはりクイックソートを
利用していました。よって、いわゆる「安定でないソート」です。
つまり、同順位の配置規則は「無い」と考えた方が無難ですね。
ちなみに「安定なソート」とは同順位の配置がソート前の状態を保つ
ソートの事で、バブルソートやラディックスソートがあります。



PHP-users メーリングリストの案内