そして効率は3倍悪くなります。したがって、PHP での再帰は注意して扱う必要があります。
最近、簡単なソート アルゴリズムを作成しましたが、PHP の再帰効率は万能ではなく、さまざまなサーバーで異なる動作をする可能性があることがわかりました。
コードをコピーします コードは次のとおりです:
function qsort(&$arr)
{
_quick_sort($arr, 0, count($arr) - 1);
/**
* 再帰アルゴリズムを使用したクイックソート。
*
* @param array $arr ソートされる配列
* @param int $low ソート済みの最下位のサブセクション
* @param int $high ソート済みの最上位のフィールド
*/
function _quick_sort(&$arr, $low, $high)
{
$low_data = $arr[$low];
$prev_high = $high; low < $high)
{
while ($arr[$high] >= $low_data && $low < $high) {
}
if ($low < $high) {
$arr [$low] = $arr[$high];
}
while ($arr[$low] <= $low_data && $low <$high) {
$low++;
if ( $low < $high) {
$arr[$high] = $arr[$low--;
}
}
$arr[$low] = $low_data; $prev_low < $low) {
_quick_sort($arr, $prev_low, $low)
}
if ($low + 1 < $prev_high) {
_quick_sort($arr, $low + 1, $prev_high) ;
}
}
関数 Quick_sort(&$arr)
{
$stack = array();
array_push($stack, count($arr) -1); (!empty ($stack)) {
$high = array_pop($stack);
$low_data = $arr[$low]; = $high ;
while ($low < $high)
{
while ($arr[$high] >= $low_data && $low < $high) {
$high--; $low < $high) {
$arr[$low] = $arr[$high++]
}
while ($arr[$low] <= $low < $high ) {
$low++;
if ($low < $high) {
$arr[$high] = $arr[$low]--; ] = $ low_data;
if ($prev_low < $low) {
array_push($stack, $low);
if ($low + 1 < $prev_high); {
array_push ($stack, $low + 1);
array_push($stack, $prev_high)
}
}
}
コードをコピーします
コードは次のとおりです。
quick_sort($arr2);
$t2 = microtime(true) - $t1;
echo "非再帰呼び出しのコスト:"
$arr1 = $arr; (true);
$t2 = microtime(true) - $t1;
}
IIS サーバー上CGI) モードでのテスト結果は次のとおりです:
非再帰呼び出しのコスト: 0.036401009559631
再帰呼び出しのコスト: 0.053439617156982
私の Apache サーバーでのテスト結果は次のとおりです:
非再帰呼び出しのコスト: 0.02278900146 4844
再帰呼び出しのコスト: 0.0 14809131622314
結果は全く逆ですが、PHPのバージョンは同じです。
再帰の効率を詳しく分析する必要があるようです。
http://www.bkjia.com/PHPjc/320823.html
www.bkjia.com
truehttp://www.bkjia.com/PHPjc/320823.html技術記事
そして効率は3倍悪くなります。したがって、PHP での再帰は注意して扱う必要があります。 最近、簡単なソート アルゴリズムを作成しましたが、PHP の再帰効率は画一的なものではなく、さまざまな点で万能であることがわかりました...