<?phpfunction quickSort(&$arr, $l, $r)
{if (count($arr)<2 || $l>$r) return;$tmp_l = $l;$tmp_r = $r;$privot = $arr[$r];while($tmp_l<$tmp_r) {while($arr[$tmp_l] < $privot && $tmp_l<$tmp_r) ++$tmp_l; //内部没有$tmp_l <$tmp_r的判断会造成$tmp_l > $tmp_r;  因为这里使用不是交换的方式,而是直接使用直接赋值的形式。$arr[$tmp_r] = $arr[$tmp_l];while($arr[$tmp_r] >= $privot && $tmp_l<$tmp_r) --$tmp_r; // 没有=等于的判断 会出现死循环,没有详细考究原因。$arr[$tmp_l] = $arr[$tmp_r];}$arr[$tmp_l] = $privot;quickSort($arr, $l, $tmp_l-1);quickSort($arr, $tmp_r+1, $r);
}$arr = array(3,4,4,4,6,7,8,9,3,3,4,2,5);
print_r($arr);
quickSort($arr, 0, count($arr)-1);
print_r($arr);

时间复杂度为n*logn, 解释如下

假设每次都恰好把区间分成两段:
递归第一层有一个区间,长度N,1*N=N
第二层有两个区间,长度N/2,2*N/2=N
第三层有四个区间,长度N/4,4*N/4=N
....
第logN层有N个区间,长度1,N*1=N
所以,总共扫描过的长度是N*logN

最坏情况 logN = N 即原数组有序时

转载于:https://www.cnblogs.com/sailrancho/p/3390825.html

PHP快速排序及其时间复杂度相关推荐

  1. 时间复杂度为on的排序算法_快速排序的时间复杂度为啥是为O(nlogn)

    本科学过数据结构课程的同学都知道快速排序最好情况下的时间复杂度 ,最坏情况下的时间复杂度为 . 但是大部分书上都没有介绍如何计算快速排序的时间复杂度, 今天我们就来简单推导一下快速排序的时间复杂度. ...

  2. 快速排序的时间复杂度分析

    快速排序的时间复杂度分析 先说结论: 最坏情况:O(N2)O(N^{2})O(N2) 最好情况和平均情况:O(NlogN)O(NlogN)O(NlogN) 下面开始分析. 假设一个序列共有 N 个元素 ...

  3. 快速排序的时间复杂度与空间复杂度

    C/C++中快速排序的时间空间复杂度分析 1.什么是快速排序 我理解的是,快速排序用的是分治法,运用的递归的算法,先挑选一个基准值,小于基准值的数放在左边, 大于基准值的数放在基准值的右边,这样就泾渭 ...

  4. 快速排序归并排序—时间复杂度分析

    引言: 大家好,我是小星星,今天要梳理的知识点是--快速排序和归并排序时间复杂度分析. 目录 一.快排时间复杂度分析 二.归并排序时间复杂度分析 三.写在最后 一.快排时间复杂度分析 快速排序的时间复 ...

  5. 快速排序的时间复杂度

    快速排序的时间复杂度是如何计算的 快速排序简单回顾 时间复杂度 快速排序简单回顾 首先选定一个元素为"轴",轴元素与其他元素依次比较并根据比较的结果交换位置,最后处于一个合适的位置 ...

  6. 快速排序及时间复杂度和空间复杂度

    快速排序思想: 快排的核心是分治.以从小到大排序为例,把第一个值作为基准值,先从最右边进行比较,若比基准值大,那么右边的指针左移一位,如果比基准值大,那么交换基准值和当前位置的值,改变比较方向,开始从 ...

  7. java快速排序的时间复杂度_java 快速排序

    思路 通过一趟排序,将要排序的数据分隔成独立的两部分,其中一部分的所有数据比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此使整个数据变成有序序 ...

  8. 【算法设计与分析】16 分治策略:快速排序(快速排序的时间复杂度计算)

    上一篇文章学习了:[算法设计与分析]15 分治策略:芯片测试 文章目录 1. 快速排序的基本思想 1.2 时间复杂度的计算 1.21 最坏情况时间复杂度计算 1.22 最好情况时间复杂度 1.23 平 ...

  9. 冒泡和快速排序的时间复杂度_八大排序算法性能分析及总结

    一.排序算法说明 排序的定义:对一个无序的序列进行排序的过程. 输入:n个数:a1,a2,a3,-,an. 输出:n个数的排列:a1,a2,a3,-,an,使得a1<=a2<=a3< ...

  10. 排序算法之快速排序及其时间复杂度的计算

    快速排序由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分 ...

最新文章

  1. Android -- 贝塞尔使圆渐变为桃心
  2. Android Studio-设置鼠标悬停显示方法声明
  3. android-async-http 源码分析
  4. JVM内存压缩开启/不开启各占几个字节
  5. 重新设计Hamcrest
  6. github迁移到gitee相关问题
  7. Cloud一分钟 |高通预在年底与苹果和解;比特币绝地反弹;广电拿下5G,或成第四大运营商...
  8. 写python脚本管理_《写给系统管理员的 Python 脚本编程指南》笔记——第八章 文档和报告...
  9. iPhone应用可用性的试探性分析
  10. Appfuse实践(一)——配置安装 转自http://www.donews.net/skyhero/archive/2004/12/17/205662.aspx...
  11. Python科学计算系列5—导数
  12. 串口监视软件_力控监控组态软件与西门子S7200
  13. 《物联网开发实战》16 实战准备:如何搭建硬件开发环境?(学习笔记)
  14. VMware虚拟机通过光盘PE安装GHOSTxp
  15. 搭建离线 Nexus3 仓库
  16. android逆向笔记 -- 记一次解决飞天助手未知模拟器方法
  17. labelme标记图像时JSON标签复制
  18. [分块] 分块入门1~4
  19. 网站都变成灰色的了,代码是怎么实现的呢?
  20. 利用云服务器实现自动化(自动上报)

热门文章

  1. 怎么暂时关闭网站php,WordPress怎么临时关闭网站进行维护
  2. 用于连接mysql的java类_【考试】列举Java连接数据库用到的类有哪些。
  3. C语言 浅谈可变参数
  4. mysql学习笔记06分组语句的使用
  5. c++中list容器
  6. Python变量类型
  7. 【C++ Priemr | 15】面向对象程序设计
  8. java教程传智播客,面试真题解析
  9. 美团点评APP在移动网络性能优化的实践,吊打面试官系列!
  10. ajax不支持post,AJAX不能正确发送POST变量