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 5.3 下载时 VC9、VC6、Thread Safe、Non Thread Safe的区别分析
Mar 28 PHP
分享下PHP register_globals 值为on与off的理解
Sep 26 PHP
PHP函数addslashes和mysql_real_escape_string的区别
Apr 22 PHP
用PHP解决的一个栈的面试题
Jul 02 PHP
PHP多线程类及用法实例
Dec 03 PHP
Laravel 5框架学习之表单验证
Apr 08 PHP
php使用GD实现颜色渐变实例
Jun 02 PHP
PHP简单实现生成txt文件到指定目录的方法
Apr 25 PHP
php+html5+ajax实现上传图片的方法
May 14 PHP
PHP使用preg_split()分割特殊字符(元字符等)的方法分析
Feb 04 PHP
[原创]PHP获取数组表示的路径方法分析【数组转字符串】
Sep 01 PHP
php设计模式之工厂模式用法经典实例分析
Sep 20 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相当简单的分页类
2008/10/02 PHP
一个简单的网页密码登陆php代码
2012/07/17 PHP
PHP 关于访问控制的和运算符优先级介绍
2013/07/08 PHP
PHP中HTML标签过滤技巧
2014/01/07 PHP
PHP使用json_encode函数时不转义中文的解决方法
2014/11/12 PHP
yii实现图片上传及缩略图生成的方法
2014/12/04 PHP
PHP将进程作为守护进程的方法
2015/03/19 PHP
PC端微信扫码支付成功之后自动跳转php版代码
2017/07/07 PHP
PHP getDocNamespaces()函数讲解
2019/02/03 PHP
Javascript注入技巧
2007/06/22 Javascript
javascript实现二分查找法实现代码
2007/11/12 Javascript
JS代码同步文本框内容的实例方法
2013/07/12 Javascript
Javascript 修改String 对象 增加去除空格功能(示例代码)
2013/11/30 Javascript
jquery中$.post()方法的简单实例
2014/02/04 Javascript
用js替换除数字与逗号以外的所有字符的代码
2014/06/07 Javascript
jQuery使用slideUp方法实现控制元素缓慢收起
2015/03/27 Javascript
jQuery事件绑定用法详解(附bind和live的区别)
2016/01/19 Javascript
js编写一个简单的产品放大效果代码
2016/06/27 Javascript
H5移动端图片压缩上传开发流程
2016/11/09 Javascript
jQuery zTree树插件简单使用教程
2017/01/10 Javascript
详解React开发中使用require.ensure()按需加载ES6组件
2017/05/12 Javascript
[01:19:46]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
举例详解Python中yield生成器的用法
2015/08/05 Python
django1.8使用表单上传文件的实现方法
2016/11/04 Python
利用python解决mysql视图导入导出依赖的问题
2017/12/17 Python
python pandas 组内排序、单组排序、标号的实例
2018/04/12 Python
python实现批量解析邮件并下载附件
2018/06/19 Python
Python爬虫的两套解析方法和四种爬虫实现过程
2018/07/20 Python
HTML5地理定位实例
2014/10/15 HTML / CSS
伦敦一家领先的精品零售商:IRIS Fashion
2019/05/24 全球购物
英国家居用品和家居装饰品购物网站:Cox & Cox
2019/08/25 全球购物
毕业生自我推荐
2013/11/04 职场文书
业务经理岗位职责
2013/11/11 职场文书
团支部推优材料
2014/05/21 职场文书
公共艺术专业自荐信
2014/09/01 职场文书
多属性、多分类MySQL模式设计
2021/04/05 MySQL