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代码优化及php相关问题总结
Oct 09 PHP
自己动手做一个SQL解释器
Oct 09 PHP
fetchAll()与mysql_fetch_array()的区别详解
Jun 05 PHP
curl实现站外采集的方法和技巧
Jan 31 PHP
PHP strip_tags()去除HTML、XML以及PHP的标签介绍
Feb 18 PHP
Session 失效的原因汇总及解决丢失办法
Sep 30 PHP
PHP MVC框架skymvc支持多文件上传
May 26 PHP
PHP不使用递归的无限级分类简单实例
Nov 05 PHP
10个值得深思的PHP面试题
Nov 14 PHP
如何判断php mysqli扩展类是否开启
Dec 24 PHP
php7函数,声明,返回值等新特性介绍
May 25 PHP
PHP中一个有趣的preg_replace函数详解
Aug 15 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
基于Linux调试工具strace与gdb的常用命令总结
2013/06/03 PHP
PHP读取PPT文件的方法
2015/12/10 PHP
thinkPHP使用pclzip打包备份mysql数据库的方法
2016/04/30 PHP
php版微信公众平台之微信网页登陆授权示例
2016/09/23 PHP
php之header的不同用法总结(实例讲解)
2017/11/28 PHP
PHP Laravel中的Trait使用方法
2019/01/20 PHP
Javascript 对象的解释
2008/11/24 Javascript
js在IE与firefox的差异集锦
2014/11/11 Javascript
BootStrap的JS插件之轮播效果案例详解
2016/05/16 Javascript
require简单实现单页应用程序(SPA)
2016/07/12 Javascript
用最简单的方法判断JavaScript中this的指向(推荐)
2017/09/04 Javascript
vue使用ElementUI时导航栏默认展开功能的实现
2018/07/04 Javascript
Vue.extend实现挂载到实例上的方法
2019/05/01 Javascript
JavaScript实现简单的图片切换功能(实例代码)
2020/04/10 Javascript
小程序富文本提取图片可放大缩小
2020/05/26 Javascript
详解Vue中Axios封装API接口的思路及方法
2020/10/10 Javascript
python 把数据 json格式输出的实例代码
2016/10/31 Python
python中如何使用正则表达式的非贪婪模式示例
2017/10/09 Python
django-初始配置(纯手写)详解
2019/07/30 Python
python自动化工具之pywinauto实例详解
2019/08/26 Python
Python实现桌面翻译工具【新手必学】
2020/02/12 Python
Python基于stuck实现scoket文件传输
2020/04/02 Python
python获取linux系统信息的三种方法
2020/10/14 Python
使用css3实现的windows8开机加载动画
2014/12/09 HTML / CSS
美国著名的团购网站:Woot
2016/08/02 全球购物
Expedia韩国官网:亚洲发展最快的在线旅游门户网站
2018/02/26 全球购物
优秀毕业生推荐信
2013/11/02 职场文书
运动会解说词50字
2014/01/18 职场文书
创先争优活动方案
2014/02/12 职场文书
2014年元旦感言
2014/03/06 职场文书
在宿舍喝酒的检讨书
2014/09/28 职场文书
临时工聘用合同协议书
2014/10/29 职场文书
工厂仓管员岗位职责
2015/04/01 职场文书
内勤岗位职责范本
2015/04/13 职场文书
怎样写家长意见
2015/06/04 职场文书
在校生证明
2015/06/17 职场文书