PHP 快速排序算法详解


Posted in PHP onNovember 10, 2014

概念

这里借用百度百科的一张图来,非常形象:

PHP 快速排序算法详解

快速排序算法是对冒泡算法的一个优化。他的思想是先对数组进行分割, 把大的元素数值放到一个临时数组里,把小的元素数值放到另一个临时数组里(这个分割的点可以是数组中的任意一个元素值,一般用第一个元素,即$array[0]),然后继续把这两个临时数组重复上面拆分,最后把小的数组元素和大的数组元素合并起来。这里用到了递归的思想。

PHP实现

/*

    快速排序

*/
function quickSort($array)

{

    if(!isset($array[1]))

        return $array;

    $mid = $array[0]; //获取一个用于分割的关键字,一般是首个元素

    $leftArray = array(); 

    $rightArray = array();
    foreach($array as $v)

    {

        if($v > $mid)

            $rightArray[] = $v;  //把比$mid大的数放到一个数组里

        if($v < $mid)

            $leftArray[] = $v;   //把比$mid小的数放到另一个数组里

    }
    $leftArray = quickSort($leftArray); //把比较小的数组再一次进行分割

    $leftArray[] = $mid;        //把分割的元素加到小的数组后面,不能忘了它哦
    $rightArray = quickSort($rightArray);  //把比较大的数组再一次进行分割

    return array_merge($leftArray,$rightArray);  //组合两个结果

}

与冒泡算法对比

这里我与之前写的冒泡算法实现的排序做了个对比,可以看出这个算法比冒泡算法的效率要高很多。

$a = array_rand(range(1,3000), 1500);  //甚至在冒泡算法超过1600个元素的时候会出现内存不足的提示,但这里为了测出两个之间的差别大小, 就设置成了1500,保证冒泡算法也能执行完毕。

shuffle($a);  //获取已经打乱了顺序的数组

$t1 = microtime(true);

quickSort($a);  //快速排序

$t2 = microtime(true);

echo (($t2-$t1)*1000).'ms<br/>';
require('./maopao.php');  //这里引用的是我之前写的冒泡算法排序

$t1 = microtime(true);

maoPao($a);   //冒泡

$t2 = microtime(true);

echo (($t2-$t1)*1000).'ms';

运行结果:

12.10880279541ms

772.64094352722ms
PHP 相关文章推荐
php中的时间显示
Jan 18 PHP
PHP读取网页文件内容的实现代码(fopen,curl等)
Jun 23 PHP
php笔记之:php函数range() round()和list()的使用说明
Apr 26 PHP
php实现httpRequest的方法
Mar 13 PHP
PHP的Laravel框架结合MySQL与Redis数据库的使用部署
Mar 21 PHP
PHP模板引擎Smarty内建函数详解
Apr 11 PHP
php性能分析之php-fpm慢执行日志slow log用法浅析
Oct 17 PHP
php连接微软MSSQL(sql server)完全攻略
Nov 27 PHP
php模式设计之观察者模式应用实例分析
Sep 25 PHP
php的RSA加密解密算法原理与用法分析
Jan 23 PHP
php下的原生ajax请求用法实例分析
Feb 28 PHP
Thinkphp 框架扩展之数据库驱动常用方法小结
Apr 23 PHP
PHP基于CURL进行POST数据上传实例
Nov 10 #PHP
ci检测是ajax还是页面post提交数据的方法
Nov 10 #PHP
php采用ajax数据提交post与post常见方法总结
Nov 10 #PHP
php学习笔记之面向对象
Nov 08 #PHP
php学习笔记之基础知识
Nov 08 #PHP
推荐一款MAC OS X 下php集成开发环境mamp
Nov 08 #PHP
php使用fgetcsv读取csv文件出现乱码的解决方法
Nov 08 #PHP
You might like
一个ORACLE分页程序,挺实用的.
2006/10/09 PHP
php 备份数据库代码(生成word,excel,json,xml,sql)
2013/06/23 PHP
php使用curl和正则表达式抓取网页数据示例
2014/04/13 PHP
PHP正则提取不包含指定网址的图片地址的例子
2014/04/21 PHP
CI框架中zip类应用示例
2014/06/17 PHP
php实现的双向队列类实例
2014/09/24 PHP
浅谈mysql_query()函数的返回值问题
2016/09/05 PHP
使用Zttp简化Guzzle 调用
2017/07/02 PHP
通过PHP设置BugFree获取邮箱通知
2019/04/25 PHP
把jQuery的类、插件封装成seajs的模块的方法
2014/03/12 Javascript
JavaScript怎么判断图片是否加载完成以便获取其尺寸
2014/05/08 Javascript
深入理解JavaScript系列(18):面向对象编程之ECMAScript实现
2015/03/05 Javascript
JS通过Cookie判断页面是否为首次打开
2016/02/05 Javascript
微信小程序实现弹出菜单
2018/07/19 Javascript
vue与原生app的对接交互的方法(混合开发)
2018/11/28 Javascript
vue element自定义表单验证请求后端接口验证
2019/12/11 Javascript
Vue项目接入Paypal实现示例详解
2020/06/04 Javascript
Vue打包部署到Nginx时,css样式不生效的解决方式
2020/08/03 Javascript
vue动态加载SVG文件并修改节点数据的操作代码
2020/08/17 Javascript
Python中字典和JSON互转操作实例
2015/01/19 Python
python获取文件扩展名的方法
2015/07/06 Python
Python实现可自定义大小的截屏功能
2018/01/20 Python
python3第三方爬虫库BeautifulSoup4安装教程
2018/06/19 Python
python多进程下的生产者和消费者模型
2020/05/07 Python
ONLY德国官方在线商店:购买时尚女装
2017/09/21 全球购物
保时捷设计:Porsche Design
2019/03/30 全球购物
台湾三立电视电商平台:电电购
2019/09/09 全球购物
Napapijri西班牙在线商店:夹克、外套、运动衫等
2020/11/05 全球购物
如何打开WebSphere远程debug
2014/10/10 面试题
大学生优秀的自我评价分享
2013/10/22 职场文书
18岁生日感言
2014/01/12 职场文书
最新个人职业生涯规划书
2014/01/22 职场文书
中式婚礼主持词
2014/03/13 职场文书
后备干部推荐材料
2014/12/24 职场文书
售后服务承诺函格式
2015/01/21 职场文书
Pyqt5将多个类组合在一个界面显示的完整示例
2021/09/04 Python