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 相关文章推荐
动态生成gif格式的图像要注意?
Oct 09 PHP
Php获取金书网的书名的实现代码
Jun 11 PHP
header跳转和include包含问题详解
Sep 08 PHP
php 模拟GMAIL,HOTMAIL(MSN),YAHOO,163,126邮箱登录的详细介绍
Jun 18 PHP
PHP把数字转成人民币大写的函数分享
Jun 30 PHP
PHP调用Linux命令权限不足问题解决方法
Feb 07 PHP
PHP QRCODE生成彩色二维码的方法
May 19 PHP
php下载文件,添加响应头的简单实例
Sep 22 PHP
PHP下的浮点运算不准的解决方法
Oct 27 PHP
微信公众平台开发-微信服务器IP接口实例(含源码)
Mar 05 PHP
PHP中如何使用Redis接管文件存储Session详解
Nov 28 PHP
PHP单例模式数据库连接类与页面静态化实现方法
Mar 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 伪静态隐藏传递参数名的四种方法
2010/02/22 PHP
PHP入门之常量简介和系统常量
2014/05/12 PHP
php实例分享之通过递归实现删除目录下的所有文件详解
2014/05/15 PHP
两千行代码的PHP学习笔记汇总
2014/10/05 PHP
php实现多城市切换特效
2015/08/09 PHP
Yii2.0中使用js异步删除示例
2017/03/10 PHP
PHP PDOStatement::rowCount讲解
2019/02/01 PHP
php tpl模板引擎定义与使用示例
2019/08/09 PHP
jquery获得下拉框值的代码
2011/08/13 Javascript
javascript开发随笔一 preventDefault的必要
2011/11/25 Javascript
jquery插件制作 提示框插件实现代码
2012/08/17 Javascript
Jquery中val()表单取值赋值的实例代码
2013/08/15 Javascript
JS对话框_JS模态对话框showModalDialog用法总结
2014/01/11 Javascript
JavaScript实现可拖拽的拖动层Div实例
2015/08/05 Javascript
js实现浏览器倒计时跳转页面效果
2016/08/12 Javascript
简洁实用的BootStrap jQuery手风琴插件
2016/08/31 Javascript
微信小程序 MinUI组件库系列之badge徽章组件示例
2018/08/20 Javascript
node使用request请求的方法
2019/12/20 Javascript
序列化模块json代码实例详解
2020/03/03 Javascript
python登录豆瓣并发帖的方法
2015/07/08 Python
python虚拟环境virualenv的安装与使用
2016/12/18 Python
Python之多线程爬虫抓取网页图片的示例代码
2018/01/10 Python
python爬虫 execjs安装配置及使用
2019/07/30 Python
Python实现RabbitMQ6种消息模型的示例代码
2020/03/30 Python
opencv 图像礼帽和图像黑帽的实现
2020/07/07 Python
Python 如何创建一个简单的REST接口
2020/07/30 Python
英国领先的独立时装店:Van Mildert
2019/10/28 全球购物
会计专业个人求职信范文
2014/01/08 职场文书
出国导师推荐信
2014/01/16 职场文书
教师旷工检讨书
2014/01/18 职场文书
党的群众路线教育实践活动批评与自我批评
2014/02/16 职场文书
卖车协议书范例
2014/09/16 职场文书
导游词之张家界
2019/10/31 职场文书
公文写作:工伤事故分析报告怎么写?
2019/11/05 职场文书
python中取整数的几种方法
2021/11/07 Python
postman中form-data、x-www-form-urlencoded、raw、binary的区别介绍
2022/01/18 HTML / CSS