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 相关文章推荐
杏林同学录(八)
Oct 09 PHP
PHP 组件化编程技巧
Jun 06 PHP
php Smarty 字符比较代码
Feb 27 PHP
PHP中register_globals参数为OFF和ON的区别(register_globals 使用详解)
Feb 05 PHP
php strnatcmp()函数的用法总结
Nov 27 PHP
PHP结合jQuery.autocomplete插件实现输入自动完成提示的功能
Apr 27 PHP
php递归实现无限分类的方法
Jul 28 PHP
yii2中使用Active Record模式的方法
Jan 09 PHP
CI框架扩展系统核心类的方法分析
May 23 PHP
Yii2 加载css、js 载静态资源的方法
Mar 10 PHP
PHP提取字符串中的手机号正则表达式怎么写
Jul 17 PHP
Laravel5.5 手动分页和自定义分页样式的简单实现
Oct 15 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
第十节--抽象方法和抽象类
2006/11/16 PHP
phpmyadmin里面导入sql语句格式的大量数据的方法
2010/06/05 PHP
ThinkPHP3.1新特性之查询条件预处理简介
2014/06/19 PHP
ThinkPHP静态缓存简单配置和使用方法详解
2016/03/23 PHP
PHP简单实现数字分页功能示例
2016/08/24 PHP
原生javascript实现图片轮播效果代码
2010/09/03 Javascript
Javascript算符的优先级介绍
2013/03/20 Javascript
Javascript 函数parseInt()转换时出现bug问题
2014/05/20 Javascript
原生的html元素选择器类似jquery选择器
2014/10/15 Javascript
判断数组的最佳方法(推荐)
2016/10/11 Javascript
微信小程序实现发送验证码按钮效果
2018/12/20 Javascript
vue简单练习 桌面时钟的实现代码实例
2019/09/19 Javascript
微信小程序用户盒子、宫格列表的实现
2020/07/01 Javascript
利用 Chrome Dev Tools 进行页面性能分析的步骤说明(前端性能优化)
2021/02/24 Javascript
Django静态资源URL STATIC_ROOT的配置方法
2014/11/08 Python
Python实现简单的文件传输与MySQL备份的脚本分享
2016/01/03 Python
一个基于flask的web应用诞生 bootstrap框架美化(3)
2017/04/11 Python
python根据list重命名文件夹里的所有文件实例
2018/10/25 Python
python使用pygame框架实现推箱子游戏
2018/11/20 Python
pycharm 将python文件打包为exe格式的方法
2019/01/16 Python
Python微医挂号网医生数据抓取
2019/01/24 Python
python实现合并两个排序的链表
2019/03/03 Python
Python Flask上下文管理机制实例解析
2020/03/16 Python
利用matplotlib为图片上添加触发事件进行交互
2020/04/23 Python
python如何提升爬虫效率
2020/09/27 Python
Vero Moda西班牙官方购物网站:丹麦BESTSELLER旗下知名女装品牌
2018/04/27 全球购物
英国复古和经典球衣网站:Vintage Football Shirts
2018/10/05 全球购物
如何唤起类中的一个方法
2013/11/29 面试题
实习销售业务员自我鉴定
2013/09/21 职场文书
政法学院毕业生求职信
2014/02/28 职场文书
企业安全生产承诺书
2014/05/22 职场文书
优秀工会工作者事迹材料
2014/06/02 职场文书
2015年志愿者服务工作总结
2015/04/20 职场文书
2015年节能减排工作总结
2015/05/14 职场文书
单位病假条范文
2015/08/17 职场文书
Python使用DFA算法过滤内容敏感词
2022/04/22 Python