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中,文件上传
Dec 06 PHP
php数组总结篇(一)
Sep 30 PHP
php 表单验证实现代码
Mar 10 PHP
PHP的array_diff()函数在处理大数组时的效率问题
Nov 27 PHP
PHP的加密方式及原理
Jun 14 PHP
php中0,null,empty,空,false,字符串关系的详细介绍
Jun 20 PHP
php微信公众平台开发之获取用户基本信息
Aug 17 PHP
yii的入口文件index.php中为什么会有这两句
Aug 04 PHP
PHP中call_user_func_array回调函数的用法示例
Nov 26 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
Aug 29 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
Feb 27 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
基于HTTP长连接的&quot;服务器推&quot;技术的php 简易聊天室
2009/10/31 PHP
PHP的构造方法,析构方法和this关键字详细介绍
2013/10/22 PHP
JSON.stringify 语法实例讲解
2012/03/14 Javascript
jQuery语法总结和注意事项小结
2012/11/11 Javascript
Js中setTimeout()和setInterval() 何时被调用执行的用法
2013/04/12 Javascript
jquery实现可拖动DIV自定义保存到数据的实例
2013/11/20 Javascript
Markdown+Bootstrap图片自适应属性详解
2016/05/21 Javascript
Node.js Sequelize如何实现数据库的读写分离
2016/10/23 Javascript
老生常谈jquery中detach()和remove()的区别
2017/03/02 Javascript
微信小程序 下拉菜单简单实例
2017/04/13 Javascript
浅谈Node.js爬虫之网页请求模块
2018/01/11 Javascript
JS基于封装函数实现的表格分页完整示例
2018/06/26 Javascript
JS 自执行函数原理及用法
2019/08/05 Javascript
浅谈vue获得后台数据无法显示到table上面的坑
2020/08/13 Javascript
[01:30:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster BO3 第二场 2月2日
2021/03/11 DOTA
python编写分类决策树的代码
2017/12/21 Python
windows下安装python的C扩展编译环境(解决Unable to find vcvarsall.bat)
2018/02/21 Python
python如何在列表、字典中筛选数据
2018/03/19 Python
Python实现二叉树前序、中序、后序及层次遍历示例代码
2019/05/18 Python
Python使用get_text()方法从大段html中提取文本的实例
2019/08/27 Python
10行Python代码计算汽车数量的实现方法
2019/10/23 Python
使用Python给头像加上圣诞帽或圣诞老人小图标附源码
2019/12/25 Python
查看keras各种网络结构各层的名字方式
2020/06/11 Python
python实现数学模型(插值、拟合和微分方程)
2020/11/13 Python
迪士尼英国官方商店:shopDisney UK
2019/09/21 全球购物
德国的大型美妆个护电商:Flaconi
2020/06/26 全球购物
初中生学习的自我评价
2013/11/14 职场文书
高级电工工作职责
2013/11/21 职场文书
幼儿园国庆节活动方案
2014/02/01 职场文书
国际会计专业求职信
2014/08/04 职场文书
合同和协议有什么区别?
2014/10/08 职场文书
中学生自我评价范文
2015/03/03 职场文书
困难补助申请报告
2015/05/19 职场文书
北京爱情故事观后感
2015/06/12 职场文书
一行代码python实现文件共享服务器
2021/04/22 Python
springboot新建项目pom.xml文件第一行报错的解决
2022/01/18 Java/Android