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 相关文章推荐
让你同时上传 1000 个文件 (一)
Oct 09 PHP
通过具体程序来理解PHP里面的抽象类
Jan 28 PHP
PHP使用数组实现队列
Feb 05 PHP
PHP OPP机制和模式简介(抽象类、接口和契约式编程)
Jun 09 PHP
简单实用的网站PHP缓存类实例
Jul 18 PHP
php实现用已经过去多长时间的方式显示时间
Jun 05 PHP
WordPress中邮件的一些修改和自定义技巧
Dec 15 PHP
PHP将二维数组某一个字段相同的数组合并起来的方法
Feb 26 PHP
php删除数组指定元素实现代码
May 03 PHP
php微信支付之公众号支付功能
May 30 PHP
PHP实现的日历功能示例
Sep 01 PHP
Laravel jwt 多表(多用户端)验证隔离的实现
Dec 18 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
将OICQ数据转成MYSQL数据
2006/10/09 PHP
PHP Error与Logging函数的深入理解
2013/06/03 PHP
php制作unicode解码工具(unicode编码转换器)代码分享
2013/12/24 PHP
PHPThumb图片处理实例
2014/05/03 PHP
php中获取主机名、协议及IP地址的方法
2014/11/18 PHP
PHPStorm 2020.1 调试 Nodejs的多种方法详解
2020/09/17 NodeJs
JSON 教程 json入门学习笔记
2020/09/22 Javascript
js中页面的重新加载(当前页面/上级页面)及frame或iframe元素引用介绍
2013/01/24 Javascript
利用js读取动态网站从服务器端返回的数据
2014/02/10 Javascript
javascript复制粘贴与clipboardData的使用
2014/10/16 Javascript
node.js中的fs.statSync方法使用说明
2014/12/16 Javascript
JavaScript中的数据类型转换方法小结
2015/10/26 Javascript
深入理解jquery自定义动画animate()
2016/05/24 Javascript
js实现获取两个日期之间所有日期的方法
2016/06/17 Javascript
JS实现简单的右下角弹出提示窗口完整实例
2016/06/21 Javascript
JavaScript中return用法示例
2016/11/29 Javascript
JavaScript获取中英文混合字符串长度的方法示例
2017/02/04 Javascript
@ResponseBody 和 @RequestBody 注解的区别
2017/03/08 Javascript
vue 2.0组件与v-model详解
2017/03/27 Javascript
Angular2.js实现表单验证详解
2017/06/23 Javascript
工作中常用到的ES6语法
2018/09/04 Javascript
python批量修改文件后缀示例代码分享
2013/12/24 Python
在python的WEB框架Flask中使用多个配置文件的解决方法
2014/04/18 Python
用python处理图片实现图像中的像素访问
2018/05/04 Python
Python中asyncio与aiohttp入门教程
2018/10/16 Python
python3 实现验证码图片切割的方法
2018/12/07 Python
python在一个范围内取随机数的简单实例
2020/08/16 Python
naturalizer加拿大官网:美国娜然女鞋
2017/04/04 全球购物
匡威意大利官方商店 :Converse意大利
2018/11/27 全球购物
会计专业导师推荐信
2014/03/08 职场文书
决心书范文
2014/03/11 职场文书
酒店爱岗敬业演讲稿
2014/09/02 职场文书
2014领导班子四风问题对照检查材料思想汇报
2014/09/21 职场文书
Nginx虚拟主机的搭建的实现步骤
2022/01/18 Servers
Elasticsearch 配置详解
2022/04/19 Java/Android
Mysql表数据比较大情况下修改添加字段的方法实例
2022/06/28 MySQL