探讨应当如何提高PHP递归效率
创始人
2024-06-13 02:50:20
0次

我们在实际代码编程中,会发现PHP递归效率是非常低下的,对于程序员来说,他们必须要很好的处理PHP的递归。在这篇文章中我们具体向大家介绍了PHP递归效率的提高方法,希望对又需要的朋友有所帮助。

最近写了一个快速排序的算法,发现PHP中的递归效率不能一刀切,在各种不同的服务器中,可能会表现不一样。

 

 

  1. function qsort(&$arr)  
  2. {  
  3. _quick_sort($arr, 0, count($arr) - 1);  
  4. }  
  5.  
  6. /**  
  7. * 采用递归算法的快速排序。  
  8. *  
  9. * @param array $arr 要排序的数组  
  10. * @param int $low ***的排序子段  
  11. * @param int $high ***的排序字段  
  12. */  
  13. function _quick_sort(&$arr, $low, $high)  
  14. {  
  15. $low_data = $arr[$low];  
  16. $prev_low = $low;  
  17. $prev_high = $high;  
  18. while ($low < $high)   
  19. {  
  20. while ($arr[$high] >= $low_data && $low < $high) {  
  21. $high--;  
  22. }  
  23. if ($low < $high) {  
  24. $arr[$low] = $arr[$high];  
  25. $low++;  
  26. }  
  27. while ($arr[$low] <= $low_data && $low < $high) {  
  28. $low++;  
  29. }  
  30. if ($low < $high) {  
  31. $arr[$high] = $arr[$low];  
  32. $high--;  
  33. }  
  34. }  
  35. $arr[$low] = $low_data;  
  36. if ($prev_low < $low) {  
  37. _quick_sort($arr, $prev_low, $low);  
  38. }  
  39. if ($low + 1 < $prev_high) {  
  40. _quick_sort($arr, $low + 1, $prev_high);  
  41. }  
  42. }  
  43.  
  44. function quick_sort(&$arr)  
  45. {  
  46. $stack = array();  
  47. array_push($stack, 0);  
  48. array_push($stack, count($arr) -1);  
  49. while (!empty($stack)) {  
  50. $high = array_pop($stack);  
  51. $low = array_pop($stack);  
  52. $low_data = $arr[$low];  
  53. $prev_low = $low;  
  54. $prev_high = $high;  
  55. while ($low < $high)   
  56. {  
  57. while ($arr[$high] >= $low_data && $low < $high) {  
  58. $high--;  
  59. }  
  60. if ($low < $high) {  
  61. $arr[$low] = $arr[$high];  
  62. $low++;  
  63. }  
  64. while ($arr[$low] <= $low_data && $low < $high) {  
  65. $low++;  
  66. }  
  67. if ($low < $high) {  
  68. $arr[$high] = $arr[$low];  
  69. $high--;  
  70. }  
  71. }  
  72. $arr[$low] = $low_data;  
  73. if ($prev_low < $low) {  
  74. array_push($stack, $prev_low);  
  75. array_push($stack, $low);  
  76. }  
  77. if ($low + 1 < $prev_high) {  
  78. array_push($stack, $low + 1);  
  79. array_push($stack, $prev_high);  
  80. }  
  81. }  
  82. } 

 

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

 

 

  1. function qsort_test1()  
  2. {  
  3. $arr = range(1, 1000);  
  4. shuffle($arr);  
  5. $arr2 = $arr;  
  6. $t1 = microtime(true);  
  7. quick_sort($arr2);  
  8. $t2 = microtime(true) - $t1;  
  9. echo "非递归调用的花费:" . $t2 . "\n";  
  10. $arr1 = $arr;  
  11. $t1 = microtime(true);  
  12. qsort($arr1);  
  13. $t2 = microtime(true) - $t1;  
  14. echo "递归调用的花费:" . $t2 . "\n";  
  15. } 

 

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

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

 

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

 

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

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

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

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
粉嫩如何诠释霸道 东芝M805... “霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
只需三步,让你掌握阿尔法路由器... 请参照以下阿尔法路由器设置方法,通过浏览器进入及设置宽带路由器。经过这三个步骤的设置,基本上能够熟悉...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
30分钟搞定iOS自定义相机 最近公司的项目中用到了相机,由于不用系统的相机,UI给的相机切图,必须自定义才可以。就花时间简单研究...