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编程开发“虚拟域名”系统
Oct 09 PHP
php中处理mysql_fetch_assoc返回来的数组 不用foreach----echo
May 04 PHP
PHP与SQL注入攻击防范小技巧
Sep 16 PHP
关于JSON以及JSON在PHP中的应用技巧
Nov 27 PHP
php session 写入数据库
Feb 13 PHP
thinkphp3.x中display方法及show方法的用法实例
May 19 PHP
Laravel4中的Validator验证扩展用法详解
Jul 26 PHP
php使用ftp远程上传文件类(完美解决主从文件同步问题的方法)
Sep 23 PHP
php preg_match的匹配不同国家语言实例
Dec 29 PHP
老生常谈PHP 文件写入和读取(必看篇)
May 22 PHP
php中上传文件的的解决方案
Sep 25 PHP
多个Laravel项目如何共用migrations详解
Sep 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引用效率问题分析
2012/03/23 PHP
解析web文件操作常见安全漏洞(目录、文件名检测漏洞)
2013/06/29 PHP
ajax返回值中有回车换行、空格的解决方法分享
2013/10/24 PHP
php类声明和php类使用方法示例分享
2014/03/29 PHP
跟我学Laravel之快速入门
2014/10/15 PHP
php自定义加密与解密程序实例
2014/12/31 PHP
PHP 实现公历日期与农历日期的互转换
2017/09/13 PHP
ExtJs的Date格式字符代码
2010/12/30 Javascript
select、radio表单回显功能实现避免使用jquery载入赋值
2013/06/08 Javascript
Extjs4实现两个GridPanel之间数据拖拽功能具体方法
2013/11/21 Javascript
Jquery下EasyUI组件中的DataGrid结果集清空方法
2014/01/06 Javascript
JQuery插件iScroll实现下拉刷新,滚动翻页特效
2014/06/22 Javascript
jQuery中DOM操作实例分析
2015/01/23 Javascript
Javascript中的包装类型介绍
2015/04/02 Javascript
javascript中apply/call和bind的使用
2017/02/15 Javascript
vue.js指令v-model使用方法
2017/03/20 Javascript
Webpack中css-loader和less-loader的使用教程
2017/04/27 Javascript
阿里大于短信验证码node koa2的实现代码(最新)
2017/09/07 Javascript
vue使用keep-alive实现数据缓存不刷新
2017/10/21 Javascript
vue-cli 构建骨架屏的方法示例
2018/11/08 Javascript
如何使用less实现随机下雪动画详解
2019/01/02 Javascript
[59:15]EG vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.26
2018/08/29 DOTA
python不带重复的全排列代码
2013/08/13 Python
python 在某.py文件中调用其他.py内的函数的方法
2019/06/25 Python
python 操作hive pyhs2方式
2019/12/21 Python
Python3 Click模块的使用方法详解
2020/02/12 Python
24岁生日感言
2014/01/13 职场文书
社团活动总结
2014/04/28 职场文书
交通文明倡议书
2014/05/16 职场文书
2014年出纳工作总结与计划
2014/12/09 职场文书
会计工作态度自我评价
2015/03/06 职场文书
毛主席纪念堂观后感
2015/06/17 职场文书
总经理2015中秋节致辞
2015/07/29 职场文书
golang中的空接口使用详解
2021/03/30 Python
Python上下文管理器Content Manager
2021/06/26 Python
SQL bool盲注和时间盲注详解
2022/07/23 SQL Server