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 相关文章推荐
我的论坛源代码(十)
Oct 09 PHP
PHP 5.0对象模型深度探索之属性和方法
Mar 27 PHP
php中变量及部分适用方法
Mar 27 PHP
php过滤危险html代码
Aug 18 PHP
PHP+ajax 无刷新删除数据
Feb 20 PHP
php获取mysql字段名称和其它信息的例子
Apr 14 PHP
PHP实现的多彩标签效果代码分享
Aug 21 PHP
PHP利用APC模块实现文件上传进度条的方法
Jan 26 PHP
PHP实现的限制IP投票程序IP来源分析
May 04 PHP
PHP session会话操作技巧小结
Sep 27 PHP
PHP面向对象自动加载机制原理与用法分析
Oct 14 PHP
PHP数据库操作三:redis用法分析
Aug 16 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
全国FM电台频率大全 - 5 内蒙古自治区
2020/03/11 无线电
php实现读取超大文件的方法
2014/07/28 PHP
php字符串过滤与替换小结
2015/01/26 PHP
PHP实现求连续子数组最大和问题2种解决方法
2017/12/26 PHP
jquery 插件学习(五)
2012/08/06 Javascript
JavaScript高级程序设计(第3版)学习笔记8 js函数(中)
2012/10/11 Javascript
10分钟学会写Jquery插件实例教程
2014/09/06 Javascript
所见即所得的富文本编辑器bootstrap-wysiwyg使用方法详解
2016/05/27 Javascript
jQuery实现滚动条滚动到子元素位置(方便定位)
2017/01/08 Javascript
基于jquery实现二级联动效果
2017/03/30 jQuery
基于AngularJS实现的工资计算器实例
2017/06/16 Javascript
jQuery实现的点击标题文字切换字体效果示例【测试可用】
2018/04/26 jQuery
js 将线性数据转为树形的示例代码
2019/05/28 Javascript
解决layer.open后laydate失效的问题
2019/09/06 Javascript
layui table 获取分页 limit的方法
2019/09/20 Javascript
Vuex,iView UI面包屑导航使用扩展详解
2019/11/04 Javascript
vue使用swiper实现中间大两边小的轮播图效果
2019/11/24 Javascript
vue使用echarts画组织结构图
2021/02/06 Vue.js
[01:10:24]DOTA2-DPC中国联赛 正赛 VG vs Aster BO3 第一场 2月28日
2021/03/11 DOTA
python字符串替换的2种方法
2014/11/30 Python
Python中的is和id用法分析
2015/01/26 Python
python 动态加载的实现方法
2017/12/22 Python
详解python中的 is 操作符
2017/12/26 Python
python+matplotlib绘制饼图散点图实例代码
2018/01/20 Python
如何使用Python实现斐波那契数列
2019/07/02 Python
将python依赖包打包成window下可执行文件bat方式
2019/12/26 Python
Python jieba库分词模式实例用法
2021/01/13 Python
彻底解决pip下载pytorch慢的问题方法
2021/03/01 Python
Muziker英国:中欧最大的音乐家商店
2020/02/05 全球购物
公务员更新知识培训实施方案
2014/03/31 职场文书
农村党支部书记党群众路线四风问题整改措施
2014/09/26 职场文书
诉讼代理人授权委托书
2014/10/11 职场文书
成都人事代理协议书
2014/10/25 职场文书
工会积极分子个人总结
2015/03/03 职场文书
有关朝花夕拾的读书笔记
2015/06/29 职场文书
九大龙王魂骨,山龙王留下躯干骨,榜首死的最憋屈(被捏碎)
2022/03/18 国漫