2011-10-21 8 views
0

this questionの作業をしばらく行った後、私はuksortが内部的にどのように動作しているのか完全には理解していません。uksort()が内部的に配列を処理する方法

処理される値の順序は何ですか?また、現在の比較の整数値を返すときに、値停止の処理は何回行われますか?

+1

配列全体を操作する大部分の(すべて?)PHP関数は、最初に始まり、最後まで動作します( 'foreach'と同じように)。 contextに関係なく 'return' * anywhere *を呼び出すと、そのコンテキスト内でのさらなる処理が停止します。私はこのルールに例外はないと思う。しかし、絶対に100%確定していることを知らないので、答えとして投稿しているわけではありません。 – DaveRandom

+0

PHPのオープンソース - あなたはそれをつかんで、uksortの実装方法を正確に見ることができます:http://php.net/downloads.php –

答えて

1

値が処理される順序は、インタープリタのソートアルゴリズムまでです。結論は、あなたがそれについて心配するべきではないということです。あなたが処理された順番に関係なく最終結果が同じになります(カードのデッキを並べ替えると、あらかじめシャッフルしたかどうかに関係なく、同じ順序で終了します)。2 < 3J < Qなどです。

最も純粋なソートアルゴリズムを除いて、結果配列の最後の場所に到着する前に値を数回訪問(処理)します。コールバックにreturnがある場合は、uksortに提供されますが、必ずしもこれらの2つの値に対してコールバックが呼び出されるとは限りません。

+0

したがって、すべての比較で0を返すソート関数を書くと、最終結果はまったく同じになりますカードのデッキの例のような配列ですか? –

+1

必ずしもそうではありません。いくつかのソートアルゴリズムは安定しています(http://www.algorithmist.com/index.php/Stable_Sort)。つまり、与えられた順序と同じ順序で等しい項目を返します。バージョンPHPでは、PHPで使用されるソートアルゴリズムは安定していません。 –

関連する問題