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编写大型网站问题集
Mar 06 PHP
PHP笔记之:日期函数的使用介绍
Apr 24 PHP
PHP实现使用优酷土豆视频地址获取swf播放器分享地址
Jun 05 PHP
ThinkPHP实现事务回滚示例代码
Jun 23 PHP
ThinkPHP框架实现session跨域问题的解决方法
Jul 01 PHP
PHP实现对png图像进行缩放的方法(支持透明背景)
Jul 15 PHP
php制作简单模版引擎
Apr 07 PHP
PHP读取zip文件的方法示例
Nov 17 PHP
php生成二维码图片方法汇总
Dec 17 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
Nov 16 PHP
PHP学习笔记之session
May 06 PHP
Laravel实现通过blade模板引擎渲染视图
Oct 25 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多种形式发送邮件(mail qmail邮件系统 phpmailer类)
2014/01/22 PHP
php中注册器模式类用法实例分析
2015/11/03 PHP
微信公众平台DEMO(PHP)
2016/05/04 PHP
关于laravel 日志写入失败问题汇总
2019/10/17 PHP
在firefox和Chrome下关闭浏览器窗口无效的解决方法
2014/01/16 Javascript
js图片实时加载提供网页打开速度
2014/09/11 Javascript
javascript关于运动的各种问题经典总结
2015/04/27 Javascript
原生Javascript和jQuery做轮播图简单例子
2016/10/11 Javascript
mint-ui的search组件在键盘显示搜索按钮的实现方法
2017/10/27 Javascript
node中的session的具体使用
2018/09/14 Javascript
基于Angular 8和Bootstrap 4实现动态主题切换的示例代码
2020/02/11 Javascript
比较详细Python正则表达式操作指南(re使用)
2008/09/06 Python
python list 合并连接字符串的方法
2013/03/09 Python
python实现向ppt文件里插入新幻灯片页面的方法
2015/04/28 Python
Python实现的Excel文件读写类
2015/07/30 Python
浅析Git版本控制器使用
2017/12/10 Python
python事件驱动event实现详解
2018/11/21 Python
python修改txt文件中的某一项方法
2018/12/29 Python
python按修改时间顺序排列文件的实例代码
2019/07/25 Python
调用其他python脚本文件里面的类和方法过程解析
2019/11/15 Python
基于pytorch的lstm参数使用详解
2020/01/14 Python
Keras使用ImageNet上预训练的模型方式
2020/05/23 Python
python中的错误如何查看
2020/07/08 Python
Python爬虫防封ip的一些技巧
2020/08/06 Python
金牌葡萄酒俱乐部:Gold Medal Wine Club
2017/11/02 全球购物
Lookfantastic日本官网:英国知名护肤、化妆品和头发护理购物网站
2018/04/21 全球购物
高级电工工作职责
2013/11/21 职场文书
安全大检查实施方案
2014/02/22 职场文书
成绩单公证书
2014/04/10 职场文书
投标服务承诺书
2014/05/28 职场文书
市政工程技术专业自荐书
2014/07/06 职场文书
介绍信范文大全
2015/05/07 职场文书
入党积极分子培养联系人意见
2015/08/12 职场文书
幼儿园大班教学反思
2016/03/02 职场文书
Python Django搭建文件下载服务器的实现
2021/05/10 Python
JavaScript执行机制详细介绍
2021/12/06 Javascript