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 中的输出缓冲
Dec 21 PHP
批量获取memcache值并按key的顺序返回的实现代码
Jun 14 PHP
PHP中CURL方法curl_setopt()函数的参数分享
Jan 19 PHP
解析csv数据导入mysql的方法
Jul 01 PHP
PHP CURL获取cookies模拟登录的方法
Nov 04 PHP
php中Socket创建与监听实现方法
Jan 05 PHP
php输出指定时间以前时间格式的方法
Mar 21 PHP
php多线程实现方法及用法实例详解
Oct 26 PHP
PHP实现查询手机归属地的方法详解
Apr 28 PHP
PHP编程实现计算抽奖概率算法完整实例
Aug 09 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
Sep 22 PHP
thinkphp5.1框架模板布局与模板继承用法分析
Jul 19 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
DOM基础及php读取xml内容操作的方法
2015/01/23 PHP
php禁用函数设置及查看方法详解
2016/07/25 PHP
PHP内存缓存功能memcached示例
2016/10/19 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
2020/02/28 PHP
JS控制表格隔行变色
2006/06/26 Javascript
javascript的函数
2007/01/31 Javascript
学习jquery之一
2007/04/27 Javascript
Javascript学习笔记5 类和对象
2010/01/11 Javascript
利用javascript的面向对象的特性实现限制试用期
2011/08/04 Javascript
jquery indexOf使用方法
2013/08/19 Javascript
location.href用法总结(最主要的)
2013/12/27 Javascript
Node.js安装教程和NPM包管理器使用详解
2014/08/16 Javascript
jQuery对象的链式操作用法分析
2016/05/10 Javascript
详解Nodejs基于mongoose模块的增删改查的操作
2016/12/21 NodeJs
vue实现列表的添加点击
2016/12/29 Javascript
JavaScript获取当前时间向前推三个月的方法示例
2017/02/04 Javascript
angular.JS实现网页禁用调试、复制和剪切
2017/03/31 Javascript
vue 粒子特效的示例代码
2017/09/19 Javascript
jQuery+koa2实现简单的Ajax请求的示例
2018/03/06 jQuery
react基本安装与测试示例
2020/04/27 Javascript
javascript实现多边形碰撞检测
2020/10/24 Javascript
利用 JavaScript 实现并发控制的示例代码
2020/12/31 Javascript
[01:38]女王驾到——至宝魔廷新尊技能&特效展示
2020/06/16 DOTA
[01:06:18]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第二场 1月26日
2021/03/11 DOTA
Python中用于返回绝对值的abs()方法
2015/05/14 Python
Python for Informatics 第11章之正则表达式(二)
2016/04/21 Python
Python分支结构(switch)操作简介
2018/01/17 Python
python散点图实例之随机漫步
2018/08/27 Python
python实现逐个读取txt字符并修改
2018/12/24 Python
numpy实现神经网络反向传播算法的步骤
2019/12/24 Python
h5调用摄像头的实现方法
2016/06/01 HTML / CSS
药学专业个人的自我评价
2013/12/31 职场文书
美德少年事迹材料500字
2014/08/19 职场文书
使用Python脚本对GiteePages进行一键部署的使用说明
2021/05/27 Python
自从在 IDEA 中用了热部署神器 JRebel 之后,开发效率提升了 10(真棒)
2021/06/26 Java/Android
聊聊CSS粘性定位sticky案例解析
2022/06/01 HTML / CSS