探讨应当如何提高PHP递归效率

开发 后端
PHP递归效率比正常的需求要低将近3倍的差距,那么我们如何才能在编码中来提高PHP递归效率呢?希望大家能同过本文介绍的内容初步了解。

我们在实际代码编程中,会发现PHP递归效率是非常低下的,对于程序员来说,他们必须要很好的处理PHP的递归。在这篇文章中我们具体向大家介绍了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);  
}  
}  

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.

 

下面是PHP递归效率测试速度的代码:

 

 

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";  
} 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.

 

#t#在我的IIS 服务器上(CGI)模式,我的PHP递归效率测试结果是:

非递归调用的花费:0.036401009559631
递归调用的花费:0.053439617156982

 

在我的Apache 服务器上,我的测试结果是:

 

非递归调用的花费:0.022789001464844
递归调用的花费:0.014809131622314

PHP递归效率的结果完全相反,而PHP的版本是一样的。

看来对PHP递归效率要具体问题具体分析了。

责任编辑:曹凯 来源: 博客园
相关推荐

2009-12-01 15:48:12

提高PHP运行效率

2009-11-23 10:31:25

PHP使用JSON

2009-11-30 18:59:52

PHP数组排序

2009-12-02 10:32:02

PHP语法解析函数

2023-04-03 16:21:20

数字孪生数字建筑

2015-04-16 10:15:45

PHPPHP执行效率PHP技巧

2021-04-27 06:52:49

团队研发效率

2020-04-30 16:15:04

物联网IoT工业效率

2023-12-29 15:24:56

物联网通信能源管理

2011-05-30 13:28:00

PHP

2021-07-17 06:48:09

AI人工智能

2017-09-29 10:38:30

Android

2009-11-25 16:29:08

PHP删除数组元素

2024-03-25 11:42:50

2020-09-09 11:23:22

数据科学与分析

2024-01-16 16:47:24

数字孪生建筑信息模型

2014-02-28 10:26:16

Linux文本搜索ack

2018-04-26 12:19:20

物联网IoT交通

2009-12-11 10:41:11

PHP变量解析顺序

2009-12-10 15:00:20

PHP获取checkb
点赞
收藏

51CTO技术栈公众号