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 相关文章推荐
smtp邮件发送一例
Oct 09 PHP
PHP调用Webservice实例代码
Jul 29 PHP
php截取后台登陆密码的代码
May 05 PHP
全新的PDO数据库操作类php版(仅适用Mysql)
Jul 22 PHP
使用PHP实现Mysql读写分离
Jun 28 PHP
如何使用PHP实现javascript的escape和unescape函数
Jun 29 PHP
PHP fopen()和 file_get_contents()应用与差异介绍
Mar 19 PHP
CI框架验证码CAPTCHA辅助函数用法实例
Nov 05 PHP
PHP中shuffle数组值随便排序函数用法
Nov 21 PHP
Zend Framework入门之环境配置及第一个Hello World示例(附demo源码下载)
Mar 21 PHP
php将文件夹打包成zip文件的简单实现方法
Oct 04 PHP
Yii针对添加行的增删改查操作示例
Oct 18 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利用header函数实现文件下载时直接提示保存
2009/11/12 PHP
php短域名转换为实际域名函数
2011/01/17 PHP
PHP判断数据库中的记录是否存在的方法
2014/11/14 PHP
PHP如何获取Cookie并实现模拟登录
2020/07/16 PHP
js静态作用域的功能。
2006/12/25 Javascript
url 编码 js url传参中文乱码解决方案
2010/04/11 Javascript
js替换字符串的所有示例代码
2013/07/23 Javascript
js 与 php 通过json数据进行通讯示例
2014/03/26 Javascript
JS实现仿QQ聊天窗口抖动特效
2015/05/10 Javascript
微信小程序 animation API详解及实例代码
2016/10/08 Javascript
JavaScript reduce和reduceRight详解
2016/10/24 Javascript
smartupload实现文件上传时获取表单数据(推荐)
2016/12/12 Javascript
Javascript中的神器——Promise
2017/02/08 Javascript
webpack4手动搭建Vue开发环境实现todoList项目的方法
2019/05/16 Javascript
JS回调函数原理与用法详解【附PHP回调函数】
2019/07/20 Javascript
vue 解决数组赋值无法渲染在页面的问题
2019/10/28 Javascript
JS 设计模式之:单例模式定义与实现方法浅析
2020/05/06 Javascript
微信小程序实现多图上传
2020/06/19 Javascript
Python中条件判断语句的简单使用方法
2015/08/21 Python
Python自定义主从分布式架构实例分析
2016/09/19 Python
浅析Python中yield关键词的作用与用法
2016/11/29 Python
详解Django+Uwsgi+Nginx的生产环境部署
2018/06/25 Python
Python使用pymongo库操作MongoDB数据库的方法实例
2019/02/22 Python
Python模块、包(Package)概念与用法分析
2019/05/31 Python
python获取点击的坐标画图形的方法
2019/07/09 Python
画pytorch模型图,以及参数计算的方法
2019/08/17 Python
使用pyinstaller逆向.pyc文件
2019/12/20 Python
Django模板获取field的verbose_name实例
2020/05/19 Python
python3.7调试的实例方法
2020/07/21 Python
爱淘宝:淘宝网购物分享平台
2017/04/28 全球购物
优秀学生获奖感言
2014/02/15 职场文书
师德模范事迹材料
2014/06/03 职场文书
新娘父亲婚礼致辞
2015/07/27 职场文书
初中英语教学随笔
2015/08/15 职场文书
2019年大学生职业生涯规划书
2019/03/25 职场文书
Elasticsearch6.2服务器升配后的bug(避坑指南)
2022/09/23 Servers