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投票程序源码
Mar 11 PHP
Wordpress php 分页代码
Oct 21 PHP
php学习之流程控制实现代码
Jun 09 PHP
nginx+php-fpm配置文件的组织结构介绍
Nov 07 PHP
php取整函数ceil,floo,round的用法及介绍
Aug 31 PHP
php权重计算方法代码分享
Jan 09 PHP
destoon整合ucenter后注册页面不跳转的解决方法
Jun 21 PHP
php判断手机浏览还是web浏览,并执行相应的动作简单实例
Jul 28 PHP
PHP面向对象中new self()与 new static()的区别浅析
Aug 17 PHP
PHP获取数据库表中的数据插入新的表再原删除数据方法
Oct 12 PHP
微信推送功能实现方式图文详解
Jul 12 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
Apr 05 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
怎样在UNIX系统下安装php3
2006/10/09 PHP
PHP教程 基本语法
2009/10/23 PHP
PHP中echo,print_r与var_dump区别分析
2014/09/29 PHP
PHP date_default_timezone_set()设置时区操作实例分析
2020/05/16 PHP
javascript中的对象和数组的应用技巧
2007/01/07 Javascript
javascript里的条件判断
2007/02/27 Javascript
JavaScript constructor和instanceof,JSOO中的一对欢喜冤家
2009/05/25 Javascript
IE6下通过a标签点击切换图片的问题
2010/11/14 Javascript
jquery.validate的使用说明介绍
2013/11/12 Javascript
javascript实现10个球随机运动、碰撞实例详解
2015/07/08 Javascript
jQuery横向擦除焦点图特效代码分享
2015/09/06 Javascript
逻辑表达式中与或非的用法详解
2016/06/06 Javascript
深入理解bootstrap框架之入门准备
2016/10/09 Javascript
ES2015 Symbol 一种绝不重复的值
2016/12/25 Javascript
Node.js利用debug模块打印出调试日志的方法
2017/04/25 Javascript
Webpack devServer中的 proxy 实现跨域的解决
2018/06/15 Javascript
vue.js轮播图组件使用方法详解
2018/07/03 Javascript
JS根据json数组多个字段排序及json数组常用操作
2019/06/06 Javascript
bootstrap table.js动态填充单元格数据的多种方法
2019/07/18 Javascript
vue前后分离调起微信支付
2019/07/29 Javascript
vant中的toast层级改变操作
2020/11/04 Javascript
[35:29]Secret vs VG 2018国际邀请赛淘汰赛BO3 第三场 8.23
2018/08/24 DOTA
Python使用稀疏矩阵节省内存实例
2014/06/27 Python
使用pyecharts无法import Bar的解决方案
2020/04/23 Python
手动安装python3.6的操作过程详解
2020/01/13 Python
在python中logger setlevel没有生效的解决
2020/02/21 Python
用python批量移动文件
2021/01/14 Python
夏洛特和乔治婴儿和儿童时装精品店:Charlotte and George
2018/06/06 全球购物
美国最佳选择产品网站:Best Choice Products
2019/05/27 全球购物
俄罗斯汽车零件和配件在线商店:CarvilleShop
2019/11/29 全球购物
新西兰最大的天然保健及护肤品网站:HealthPost(直邮中国)
2021/02/13 全球购物
民事赔偿协议书
2014/11/02 职场文书
2014年招生工作总结
2014/11/26 职场文书
任长霞观后感
2015/06/16 职场文书
幼师自荐信范文(2016推荐篇)
2016/01/28 职场文书
Spring Boot 的创建和运行示例代码详解
2022/07/23 Java/Android