php语言 百分网手机站

PHP递归效率分析

时间:2020-11-15 14:46:32 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递归效率分析】相关文章:

1.php递归函数三种方式

2.php开发效率提高的方法

3.提高PHP执行效率的50个技巧

4.PHP开发提高效率技巧

5.提高PHP编程效率的53个要点

6.PHP文件上传源码分析

7.解析提高PHP执行效率的50个技巧

8.PHP常用开发工具分析

9.PHP常用开发工具分析