PHP 递归效率分析


Posted in PHP onNovember 24, 2009

而且是差了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的版本是一样的。
看来对递归的效率要具体问题具体分析了。
PHP 相关文章推荐
php设计模式 Composite (组合模式)
Jun 26 PHP
PHP下判断网址是否有效的代码
Oct 08 PHP
学习使用curl采集curl使用方法
Jan 11 PHP
zend framework框架中url大小写问题解决方法
Aug 19 PHP
Yii框架form表单用法实例
Dec 04 PHP
分享下php5类中三种数据类型的区别
Jan 26 PHP
PHP多文件上传类实例
Mar 07 PHP
php结合mysql与mysqli扩展处理事务的方法
Jun 29 PHP
PHP支付系统设计与典型案例分享
Aug 02 PHP
php微信开发之自定义菜单完整流程
Oct 08 PHP
利用PHP判断是否是连乘数字串的方法示例
Jul 03 PHP
Laravel框架处理用户的请求操作详解
Dec 20 PHP
PHP 单引号与双引号的区别
Nov 24 #PHP
PHP小程序自动提交到自助友情连接
Nov 24 #PHP
php 引用(&amp;)详解
Nov 20 #PHP
php+javascript的日历控件
Nov 19 #PHP
php与XML、XSLT、Mysql的结合运用实现代码
Nov 19 #PHP
php 静态变量的初始化
Nov 15 #PHP
PHP 程序员的调试技术小结
Nov 15 #PHP
You might like
利用curl抓取远程页面内容的示例代码
2013/07/23 PHP
PHP判断文章里是否有图片的简单方法
2014/07/26 PHP
thinkPHP5框架auth权限控制类与用法示例
2018/06/12 PHP
33种Javascript 表格排序控件收集
2009/12/03 Javascript
textarea中的手动换行处理的jquery代码
2011/02/26 Javascript
Javascript继承机制的设计思想分享
2011/08/28 Javascript
javascript同页面多次调用弹出层具体实例代码
2013/08/16 Javascript
js中的setInterval和setTimeout使用实例
2014/05/09 Javascript
详解JavaScript基于面向对象之创建对象(1)
2015/12/10 Javascript
轻松实现javascript图片轮播特效
2016/01/13 Javascript
使用jQuery制作遮罩层弹出效果的极简实例分享
2016/05/12 Javascript
微信小程序开发之实现选项卡(窗口顶部TabBar)页面切换
2016/11/25 Javascript
使用 jQuery 实现表单验证功能
2017/07/05 jQuery
Node.js 中使用 async 函数的方法
2017/11/20 Javascript
vue.js实现左边导航切换右边内容
2019/10/21 Javascript
JS控制GIF图片的停止与显示
2019/10/24 Javascript
vue实现弹幕功能
2019/10/25 Javascript
Vue 实现创建全局组件,并且使用Vue.use() 载入方式
2020/08/11 Javascript
python操作字典类型的常用方法(推荐)
2016/05/16 Python
Python3.6基于正则实现的计算器示例【无优化简单注释版】
2018/06/14 Python
python顺序的读取文件夹下名称有序的文件方法
2018/07/11 Python
selenium+python 对输入框的输入处理方法
2018/10/11 Python
django-rest-swagger的优化使用方法
2019/08/29 Python
python 写函数在一定条件下需要调用自身时的写法说明
2020/06/01 Python
深入理解css中vertical-align属性
2017/04/18 HTML / CSS
介绍一下#error预处理
2015/09/25 面试题
在职研究生自我鉴定
2013/10/16 职场文书
护理自荐信
2013/10/22 职场文书
企事业单位求职者的自我评价
2013/12/28 职场文书
促销活动方案模板
2014/02/24 职场文书
军训拉歌口号
2014/06/13 职场文书
青年志愿者活动方案
2014/08/17 职场文书
酒店前台接待岗位职责
2015/04/02 职场文书
运动会观后感
2015/06/09 职场文书
2016年暑期见闻作文
2015/11/25 职场文书
python如何在word中存储本地图片
2021/04/07 Python