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 相关文章推荐
Smarty模板快速入门
Jan 04 PHP
php数据库密码的找回的步骤
Jan 12 PHP
Notice: Trying to get property of non-object problem(PHP)解决办法
Mar 11 PHP
PHP Global变量定义当前页面的全局变量实现探讨
Jun 05 PHP
PHP扩展CURL的用法详解
Jun 20 PHP
PHP中的闭包(匿名函数)浅析
Feb 07 PHP
PHP7.0版本备注
Jul 23 PHP
PHP实现自动识别原编码并对字符串进行编码转换的方法
Jul 13 PHP
PHP正则替换函数preg_replace()报错:Notice Use of undefined constant的解决方法分析
Feb 04 PHP
PHP使用finfo_file()函数检测上传图片类型的实现方法
Apr 18 PHP
Yii2实现ActiveForm ajax提交
May 26 PHP
Laravel学习教程之model validation的使用示例
Oct 23 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网站提速三大“软”招
2006/10/09 PHP
无法载入 mcrypt 扩展,请检查 PHP 配置终极解决方案
2011/07/18 PHP
PHP时间戳 strtotime()使用方法和技巧
2013/10/29 PHP
PHP实现的DES加密解密封装类完整实例
2017/04/29 PHP
php微信开发之音乐回复功能
2018/06/14 PHP
php策略模式简单示例分析【区别于工厂模式】
2019/09/25 PHP
告诉大家什么是JSON
2008/06/10 Javascript
event.X和event.clientX的区别分析
2011/10/06 Javascript
基于jQuery插件实现环形图标菜单旋转切换特效
2015/05/15 Javascript
JS获取时间的相关函数及时间戳与时间日期之间的转换
2016/02/04 Javascript
AngularJS基础 ng-click 指令示例代码
2016/08/01 Javascript
JavaScript使用math.js进行精确计算操作示例
2018/06/19 Javascript
微信小程序之多列表的显示和隐藏功能【附源码】
2018/08/06 Javascript
Vue中对iframe实现keep alive无刷新的方法
2019/07/23 Javascript
vue 实现根据data中的属性值来设置不同的样式
2020/08/04 Javascript
[03:37]2014DOTA2国际邀请赛 主赛事第一日胜者组TOPPLAY
2014/07/19 DOTA
python自动化工具日志查询分析脚本代码实现
2013/11/26 Python
Python备份目录及目录下的全部内容的实现方法
2016/06/12 Python
Pycharm设置去除显示的波浪线方法
2018/10/28 Python
python ddt数据驱动最简实例代码
2019/02/22 Python
解决Django生产环境无法加载静态文件问题的解决
2019/04/23 Python
Python基于wordcloud及jieba实现中国地图词云图
2020/06/09 Python
拿来就用!Python批量合并PDF的示例代码
2020/08/10 Python
美国花园雕像和家居装饰网上商店:Design Toscano
2019/03/09 全球购物
大学毕业生文采飞扬的自我鉴定
2013/12/03 职场文书
通信研究生自荐信
2014/02/01 职场文书
《石榴》教学反思
2014/03/02 职场文书
村长贪污检举信
2014/04/04 职场文书
学习雷锋寄语大全
2014/04/11 职场文书
教师年度考核评语
2014/04/28 职场文书
2014年超市员工工作总结
2014/11/18 职场文书
2015年保育员个人工作总结
2015/05/13 职场文书
2015秋季开学典礼演讲稿
2015/07/16 职场文书
拒绝盗图!教你怎么用python给图片加水印
2021/06/04 Python
Spring依赖注入多种类型数据的示例代码
2022/03/31 Java/Android
用Python仅20行代码编写一个简单的端口扫描器
2022/04/08 Python