经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » PHP » 查看文章
[PHP] 算法-快速排序的PHP实现
来源:cnblogs  作者:陶士涵  时间:2018/9/25 20:37:29  对本文有异议
  1. 快速排序:
  2. 1.基于二分的思想
  3. 2.第一个作为基准数,左右各一个指针,同时扫描,右边先走,找到比基准数小的停下
  4. 左边再走,找到比基准数大的停下,左右交换
  5. 3.当左右相遇的时候,把当前的和基准数调换,递归调用
  6. 4.快速排序的最差时间复杂度和冒泡排序是一样的都是O(N2),它的平均时间复杂度为O(NlogN)
  7. quickSort &arr,left,right
  8. if left>right return
  9. temp=arr[left]
  10. i=left
  11. j=right
  12. while i<j
  13. while arr[j]>=temp && i<j
  14. j--
  15. while arr[i]<=temp && i<j
  16. i++
  17. t=arr[i]
  18. a[i]=arr[j]
  19. a[j]=t;
  20. arr[left]=arr[i]
  21. arr[i]=temp
  22. quickSort(arr,left,i-1)
  23. quickSort(arr,i+1,right)

 

  1. <?php
  2. //快速排序
  3. function quickSort(&$arr,$left,$right){
  4. //left大于right的就退出
  5. if($left>$right) return;
  6. //选第一个为基准数
  7. $temp=$arr[$left];
  8. //i是左边的指针
  9. $i=$left;
  10. //j是右边的指针
  11. $j=$right;
  12. //i小于j的时候一直循环
  13. while($i<$j){
  14. //j从右往左走,大于等于基准数就往前走一步,并且最终j会等于i
  15. while($arr[$j]>=$temp && $i<$j){
  16. $j--;
  17. }
  18. //i从左往右走,小于等于基准数的就往前走一步,最终i会等于j
  19. while($arr[$i]<=$temp && $i<$j){
  20. $i++;
  21. }
  22. //调换i和j所在的数
  23. $t=$arr[$i];
  24. $arr[$i]=$arr[$j];
  25. $arr[$j]=$t;
  26. }
  27. //基准数和i,j所在的位置的数调换位置
  28. $arr[$left]=$arr[$i];
  29. $arr[$i]=$temp;
  30. //左半部分递归
  31. quickSort($arr,$left,$i-1);
  32. //右半部分递归
  33. quickSort($arr,$i+1,$right);
  34. }
  35. $arr=array(9,3,5,1,7,9,6,2,4,8,0);
  36. $right=count($arr)-1;
  37. quickSort($arr,0,$right);
  38. var_dump($arr);

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号