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连接SQLServer2005 的问题解决方法
Jul 19 PHP
php ctype函数中文翻译和示例
Mar 21 PHP
PHP中使用TCPDF生成PDF文档实例
Jul 01 PHP
PHP读取CURL模拟登录时生成Cookie文件的方法
Nov 04 PHP
19个Android常用工具类汇总
Dec 30 PHP
正确的PHP匹配UTF-8中文的正则表达式
May 13 PHP
PHP+MySQL实现无极限分类栏目的方法
Dec 23 PHP
PHP实现的通过参数生成MYSQL语句类完整实例
Apr 11 PHP
浅谈laravel框架与thinkPHP框架的区别
Oct 23 PHP
php 函数中静态变量使用的问题实例分析
Mar 05 PHP
thinkphp框架表单数组实现图片批量上传功能示例
Apr 04 PHP
PHP实现页面静态化深入讲解
Mar 04 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中对缓冲区的控制实现代码
2013/09/29 PHP
深入理解PHP内核(二)之SAPI探究
2015/11/10 PHP
4种PHP异步执行的常用方式
2015/12/24 PHP
实例分析PHP中PHPMailer发邮件
2017/12/13 PHP
PHP进阶学习之反射基本概念与用法分析
2019/06/18 PHP
setTimeout 不断吐食CPU的问题分析
2009/04/01 Javascript
关于js datetime的那点事
2011/11/15 Javascript
JavaScript版的TwoQueues缓存模型
2014/12/29 Javascript
JavaScript学习笔记之JS函数
2015/01/22 Javascript
Node.js的Koa框架上手及MySQL操作指南
2016/06/13 Javascript
javascript实现的左右无缝滚动效果
2016/09/19 Javascript
bootstrap datepicker 与bootstrapValidator同时使用时选择日期后无法正常触发校验的解决思路
2016/09/28 Javascript
input输入密码变黑点密文的实现方法
2017/01/09 Javascript
详解基于webpack2.x的vue2.x的多页面站点
2017/08/21 Javascript
Vue.js特性Scoped Slots的浅析
2019/02/20 Javascript
微信小程序常用赋值方法小结
2019/04/30 Javascript
layui use 定义js外部引用函数的方法
2019/09/26 Javascript
javascript设计模式 ? 命令模式原理与用法实例分析
2020/04/20 Javascript
详解python开发环境搭建
2016/12/16 Python
Java及python正则表达式详解
2017/12/27 Python
python3实现字符串操作的实例代码
2019/04/16 Python
Python+PyQt5实现美剧爬虫可视工具的方法
2019/04/25 Python
如何解决django-celery启动后迅速关闭
2019/10/16 Python
基于html5实现的图片墙效果
2014/10/16 HTML / CSS
Html5 audio标签样式的修改
2016/01/28 HTML / CSS
日本面向世界,国际级的免税在线购物商城:DOKODEMO
2017/02/01 全球购物
台湾生鲜宅配:大口市集
2017/10/14 全球购物
COS美国官网:知名服装品牌
2019/04/08 全球购物
JBL美国官方商店:扬声器、耳机等
2019/12/01 全球购物
毕业生自荐书
2014/02/03 职场文书
网络工程师专家职业发展路线
2014/02/14 职场文书
会议室标语
2014/06/21 职场文书
2014年小学教学工作总结
2014/11/13 职场文书
大学感恩节活动总结
2015/05/05 职场文书
周一给客户的问候语
2015/11/10 职场文书
创业方案:赚钱的烧烤店该怎样做?
2019/07/05 职场文书