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+xslt在windows平台上
Oct 09 PHP
图书管理程序(二)
Oct 09 PHP
让你的PHP同时支持GIF、png、JPEG
Oct 09 PHP
php 中英文语言转换类代码
Aug 11 PHP
PHP JSON出错:Cannot use object of type stdClass as array解决方法
Aug 16 PHP
PHP实现从远程下载文件的方法
Mar 12 PHP
PHP Static延迟静态绑定用法分析
Mar 16 PHP
php实现带读写分离功能的MySQL类完整实例
Jul 28 PHP
thinkphp验证码的实现(form、ajax实现验证)
Jul 28 PHP
微信企业转账之入口类分装php代码
Oct 01 PHP
微信公众号实现扫码获取微信用户信息(网页授权)
Apr 09 PHP
PHP过滤器 filter_has_var() 函数用法实例分析
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
PHP @ at 记号的作用示例介绍
2014/10/10 PHP
PHP中使用xmlreader读取xml数据示例
2014/12/29 PHP
简单谈谈favicon
2015/06/10 PHP
php语言的7种基本的排序方法
2020/12/28 PHP
ThinkPHP 在阿里云上的nginx.config配置实例详解
2017/10/11 PHP
确保Laravel网站不会被嵌入到其他站点中的方法
2019/10/18 PHP
js对象关系图 方便dom操作
2012/03/18 Javascript
jQuery登陆判断简单实现代码
2013/04/21 Javascript
jquery中加载图片自适应大小主要实现代码
2013/08/23 Javascript
Vue.js组件使用开发实例教程
2016/11/01 Javascript
微信公众平台开发教程(六)获取个性二维码的实例
2016/12/02 Javascript
ES6学习之变量的解构赋值
2017/02/12 Javascript
JS控件bootstrap datepicker使用方法详解
2017/03/25 Javascript
jQuery实现可兼容IE6的淡入淡出效果告警提示功能示例
2017/09/20 jQuery
jQuery中ajax请求后台返回json数据并渲染HTML的方法
2018/08/08 jQuery
jQuery 同时获取多个标签的指定内容并储存为数组
2018/11/20 jQuery
JavaScript对JSON数组简单排序操作示例
2019/01/31 Javascript
Vue中rem与postcss-pxtorem的应用详解
2019/11/20 Javascript
nodejs实现百度舆情接口应用示例
2020/02/07 NodeJs
[00:32]2018DOTA2亚洲邀请赛iG出场
2018/04/03 DOTA
[59:36]2018DOTA2亚洲邀请赛 4.3 突围赛 Secret vs VG 第二场
2018/04/04 DOTA
Python如何为图片添加水印
2016/11/25 Python
django celery redis使用具体实践
2019/04/08 Python
Python如何访问字符串中的值
2020/02/09 Python
django 连接数据库出现1045错误的解决方式
2020/05/14 Python
使用CSS媒体查询(Media Queries)和JavaScript判断浏览器设备类型的方法
2014/04/03 HTML / CSS
浅谈Html5页面打开app的一些思考
2020/03/30 HTML / CSS
Ellesse英国官网:意大利高级运动品牌
2019/07/23 全球购物
Monica Vinader官网:英国轻奢珠宝品牌
2020/02/05 全球购物
自1926年以来就为冰岛保持温暖:66°North
2020/11/27 全球购物
数控技术与应用毕业生自荐信
2013/09/24 职场文书
淘宝好评语句大全
2014/12/31 职场文书
工地材料员岗位职责
2015/04/11 职场文书
2015年学校总务处工作总结
2015/05/19 职场文书
uniapp 微信小程序 自定义tabBar 导航
2022/04/22 Javascript
python数据处理之Pandas类型转换
2022/04/28 Python