亚洲精品中文字幕无乱码_久久亚洲精品无码AV大片_最新国产免费Av网址_国产精品3级片

php語言

PHP遞歸效率分析

時間:2024-08-25 10:38:53 php語言 我要投稿
  • 相關(guān)推薦

PHP遞歸效率分析

  而且是差了3倍的效率。所以,PHP中的遞歸一定要小心的對待。就跟隨百分網(wǎng)小編一起去了解下吧,想了解更多相關(guān)信息請持續(xù)關(guān)注我們應(yīng)屆畢業(yè)生考試網(wǎng)!

  最近寫了一個快速排序的算法,發(fā)現(xiàn)PHP中的遞歸效率不能一刀切,在各種不同的服務(wù)器中,可能會表現(xiàn)不一樣。

  復(fù)制代碼 代碼如下:

  function qsort(&$arr)

  {

  _quick_sort($arr, 0, count($arr) - 1);

  }

  /**

  * 采用遞歸算法的快速排序。

  *

  * @param array $arr 要排序的數(shù)組

  * @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);

  }

  }

  }

  下面是測試速度的代碼:

  復(fù)制代碼 代碼如下:

  function qsort_test1()

  {

  $arr = range(1, 1000);

  shuffle($arr);

  $arr2 = $arr;

  $t1 = microtime(true);

  quick_sort($arr2);

  $t2 = microtime(true) - $t1;

  echo "非遞歸調(diào)用的花費:" . $t2 . "n";

  $arr1 = $arr;

  $t1 = microtime(true);

  qsort($arr1);

  $t2 = microtime(true) - $t1;

  echo "遞歸調(diào)用的花費:" . $t2 . "n";

  }

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

  非遞歸調(diào)用的花費:0.036401009559631

  遞歸調(diào)用的花費:0.053439617156982

  在我的Apache 服務(wù)器上,我的測試結(jié)果是:

  非遞歸調(diào)用的花費:0.022789001464844

  遞歸調(diào)用的花費:0.014809131622314

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

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

【PHP遞歸效率分析】相關(guān)文章:

php遞歸遍歷多維數(shù)組的方法10-06

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

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

PHP與ASP的分析對比10-27

php內(nèi)核分析之?dāng)U展10-03

PHP頁面漏洞分析的方法08-13

php中引用的用法分析06-22

PHP常用開發(fā)工具分析06-27

2017年P(guān)HP就業(yè)前景及就業(yè)分析08-06

php中allow-url-include的應(yīng)用分析07-25