<address id="ousso"></address>
<form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
  1. 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

    <address id="ousso"></address>
    <form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
    1. 日日做夜狠狠爱欧美黑人