PHP递归实现快速排序的方法示例


Posted in PHP onDecember 18, 2017

本文实例讲述了PHP递归实现快速排序的方法。分享给大家供大家参考,具体如下:

首先我们要理解一下快速排序的原理找到当前数组中的任意一个元素(一般选择第一个元素),作为标准,新建两个空数组,遍历整个数组元素,如果遍历到的元素比当前的元素要小,那么就放到左边的数组,否则放到右面的数组,然后再对新数组进行同样的操作。

不难发现,这里符合递归的原理,所以我们可以用递归来实现。

使用递归,则需要找到递归点和递归出口:

递归点:如果数组的元素大于1,就需要再进行分解,所以我们的递归点就是新构造的数组元素个数大于1

递归出口:我们什么时候不需要再对新数组不进行排序了呢?就是当数组元素个数变成1的时候,所以这就是我们的出口。

理解了原理,来看一下代码实现~

<?php
//快速排序
//待排序数组
$arr=array(6,3,8,6,4,2,9,5,1);
//函数实现快速排序
function quick_sort($arr)
{
    //判断参数是否是一个数组
    if(!is_array($arr)) return false;
    //递归出口:数组长度为1,直接返回数组
    $length=count($arr);
    if($length<=1) return $arr;
    //数组元素有多个,则定义两个空数组
    $left=$right=array();
    //使用for循环进行遍历,把第一个元素当做比较的对象
    for($i=1;$i<$length;$i++)
    {
      //判断当前元素的大小
      if($arr[$i]<$arr[0]){
        $left[]=$arr[$i];
      }else{
        $right[]=$arr[$i];
      }
    }
    //递归调用
    $left=quick_sort($left);
    $right=quick_sort($right);
    //将所有的结果合并
    return array_merge($left,array($arr[0]),$right);
}
//调用
echo "<pre>";
print_r(quick_sort($arr));

运行结果:

Array
(
  [0] => 1
  [1] => 2
  [2] => 3
  [3] => 4
  [4] => 5
  [5] => 6
  [6] => 6
  [7] => 8
  [8] => 9
)
PHP 相关文章推荐
在服务端进行目录建立、删除,文件上传、删除的过程的php代码
Sep 10 PHP
PHP5中新增stdClass 内部保留类
Jun 13 PHP
phpMyAdmin出现无法载入 mcrypt 扩展,请检查PHP配置的解决方法
Mar 26 PHP
php中session使用示例
Mar 29 PHP
php学习笔记之面向对象
Nov 08 PHP
php中try catch捕获异常实例详解
Nov 21 PHP
PHP Smarty模版简单使用方法
Mar 30 PHP
php有效防止图片盗用、盗链的两种方法
Nov 01 PHP
一个非常实用的php文件上传类
Jul 04 PHP
PHP设计模式之委托模式定义与用法简单示例
Aug 13 PHP
网站被恶意镜像怎么办 php一段代码轻松搞定(全面版)
Oct 23 PHP
PHP实现单条sql执行多个数据的insert语句方法
Oct 11 PHP
Laravel框架中自定义模板指令总结
Dec 17 #PHP
PHP结合Vue实现滚动底部加载效果
Dec 17 #PHP
PHP7下协程的实现方法详解
Dec 17 #PHP
浅谈PHP实现大流量下抢购方案
Dec 15 #PHP
PHP实现数组的笛卡尔积运算示例
Dec 15 #PHP
PHP中OpenSSL加密问题整理
Dec 14 #PHP
利用PHP判断是手机移动端还是PC端访问的函数示例
Dec 14 #PHP
You might like
php表单转换textarea换行符的方法
2010/09/10 PHP
php与mysql建立连接并执行SQL语句的代码
2011/07/04 PHP
ThinkPHP通过AJAX返回JSON的两种实现方法
2014/12/18 PHP
Symfony页面的基本创建实例详解
2015/01/26 PHP
WordPress中获取页面链接和标题的相关PHP函数用法解析
2015/12/17 PHP
PHP环境搭建的详细步骤
2016/06/30 PHP
Extjs grid添加一个图片状态或者按钮的方法
2014/04/03 Javascript
再谈Jquery Ajax方法传递到action(补充)
2014/05/12 Javascript
chrome不支持form.submit的解决方案
2015/04/28 Javascript
jquery实现两边飘浮可关闭的对联广告
2015/11/27 Javascript
判断数组是否包含某个元素的js函数实现方法
2016/05/19 Javascript
JavaScript导航脚本判断当前导航
2016/07/12 Javascript
JS IOS/iPhone的Safari浏览器不兼容Javascript中的Date()问题如何解决
2016/11/11 Javascript
禁用backspace网页回退功能的实现代码
2016/11/15 Javascript
vue获取data数据改变前后的值方法
2019/11/07 Javascript
vue+element实现图片上传及裁剪功能
2020/06/29 Javascript
vue 使用微信jssdk,调用微信相册上传图片功能
2020/11/13 Javascript
[01:10:48]完美世界DOTA2联赛PWL S2 GXR vs PXG 第一场 11.18
2020/11/18 DOTA
Python实现SMTP发送邮件详细教程
2021/03/02 Python
解决python2.7 查询mysql时出现中文乱码
2016/10/09 Python
python executemany的使用及注意事项
2017/03/13 Python
Python设计模式之MVC模式简单示例
2018/01/10 Python
Python编程二分法实现冒泡算法+快速排序代码示例
2018/01/15 Python
深入分析python数据挖掘 Json结构分析
2018/04/21 Python
python-tkinter之按钮的使用,开关方法
2019/06/11 Python
pycharm创建scrapy项目教程及遇到的坑解析
2019/08/15 Python
python模块常用用法实例详解
2019/10/17 Python
TensorFlow设置日志级别的几种方式小结
2020/02/04 Python
Python图像处理库PIL的ImageDraw模块介绍详解
2020/02/26 Python
CSS3制作hover下划线动画
2017/03/27 HTML / CSS
利用CSS3实现文字折纸效果实例代码
2018/07/10 HTML / CSS
美国知名运动产品零售商:Foot Locker
2016/07/23 全球购物
音乐表演专业毕业生求职信
2013/10/14 职场文书
合同权益转让协议书模板
2014/11/18 职场文书
2015大学党建带团建工作总结
2015/07/23 职场文书
奖学金主要事迹范文
2015/11/04 职场文书