<delect id="sj01t"></delect>
  1. <em id="sj01t"><label id="sj01t"></label></em>
  2. <div id="sj01t"></div>
    1. <em id="sj01t"></em>

            <div id="sj01t"></div>
            php語言

            PHP遞歸效率分析

            時間:2025-03-09 14:19:37 php語言 我要投稿
            • 相關推薦

            PHP遞歸效率分析

              而且是差了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_low = $low;

              $prev_high = $high;

              while ($low < $high)

              {

              while ($arr[$high] >= $low_data && $low < $high) {

              $high--;

              }

              if ($low < $high) {

              $arr[$low] = $arr[$high];

              $low++;

              }

              while ($arr[$low] <= $low_data && $low < $high) {

              $low++;

              }

              if ($low < $high) {

              $arr[$high] = $arr[$low];

              $high--;

              }

              }

              $arr[$low] = $low_data;

              if ($prev_low < $low) {

              _quick_sort($arr, $prev_low, $low);

              }

              if ($low + 1 < $prev_high) {

              _quick_sort($arr, $low + 1, $prev_high);

              }

              }

              function quick_sort(&$arr)

              {

              $stack = array();

              array_push($stack, 0);

              array_push($stack, count($arr) -1);

              while (!empty($stack)) {

              $high = array_pop($stack);

              $low = array_pop($stack);

              $low_data = $arr[$low];

              $prev_low = $low;

              $prev_high = $high;

              while ($low < $high)

              {

              while ($arr[$high] >= $low_data && $low < $high) {

              $high--;

              }

              if ($low < $high) {

              $arr[$low] = $arr[$high];

              $low++;

              }

              while ($arr[$low] <= $low_data && $low < $high) {

              $low++;

              }

              if ($low < $high) {

              $arr[$high] = $arr[$low];

              $high--;

              }

              }

              $arr[$low] = $low_data;

              if ($prev_low < $low) {

              array_push($stack, $prev_low);

              array_push($stack, $low);

              }

              if ($low + 1 < $prev_high) {

              array_push($stack, $low + 1);

              array_push($stack, $prev_high);

              }

              }

              }

              下面是測試速度的代碼:

              復制代碼 代碼如下:

              function qsort_test1()

              {

              $arr = range(1, 1000);

              shuffle($arr);

              $arr2 = $arr;

              $t1 = microtime(true);

              quick_sort($arr2);

              $t2 = microtime(true) - $t1;

              echo "非遞歸調用的花費:" . $t2 . "n";

              $arr1 = $arr;

              $t1 = microtime(true);

              qsort($arr1);

              $t2 = microtime(true) - $t1;

              echo "遞歸調用的花費:" . $t2 . "n";

              }

              在我的IIS 服務器上(CGI)模式,我的測試結果是:

              非遞歸調用的花費:0.036401009559631

              遞歸調用的花費:0.053439617156982

              在我的Apache 服務器上,我的測試結果是:

              非遞歸調用的花費:0.022789001464844

              遞歸調用的花費:0.014809131622314

              結果完全相反,而PHP的版本是一樣的。

              看來對遞歸的效率要具體問題具體分析了。</p

            【PHP遞歸效率分析】相關文章:

            php遞歸遍歷刪除文件的方法10-25

            php遞歸遍歷多維數組的方法10-06

            PHP如何遞歸實現json類06-27

            解讀php全排列遞歸算法代碼07-07

            php遞歸函數三種方式11-07

            php開發效率提高的方法11-02

            PHP使用遞歸算法無限遍歷數組示例05-20

            php遞歸創建和刪除文件夾的代碼09-21

            用php自定義函數之遞歸刪除文件及目錄09-13

            <delect id="sj01t"></delect>
            1. <em id="sj01t"><label id="sj01t"></label></em>
            2. <div id="sj01t"></div>
              1. <em id="sj01t"></em>

                      <div id="sj01t"></div>
                      黄色视频在线观看