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 相关文章推荐
phpwind中的数据库操作类
Jan 02 PHP
php生成随机数或者字符串的代码
Sep 05 PHP
php横向重复区域显示二法
Sep 25 PHP
解析dedecms空间迁移步骤详解
May 15 PHP
PHP计算2点经纬度之间的距离代码
Aug 12 PHP
is_uploaded_file函数引发的不能上传文件问题
Oct 29 PHP
ASP和PHP实现生成网站快捷方式并下载到桌面的方法
May 08 PHP
在win7中搭建Linux+PHP 开发环境
Oct 08 PHP
PHP实现动态web服务器方法
Jul 29 PHP
php+mysql查询实现无限下级分类树输出示例
Oct 03 PHP
thinkPHP+phpexcel实现excel报表输出功能示例
Jun 06 PHP
PHP获取php,mysql,apche的版本信息及更多服务器信息
Mar 09 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学习笔记之数组篇
2011/06/28 PHP
浅谈PHP中关于foreach使用引用变量的坑
2016/11/14 PHP
Yii2.0多文件上传实例说明
2017/07/24 PHP
php数据序列化测试实例详解
2017/08/12 PHP
js 事件处理函数间的Event物件是否全等
2011/04/08 Javascript
jquery入门——事件机制之事件中的冒泡现象示例解释
2020/09/12 Javascript
js取得url地址参数实例
2013/02/22 Javascript
js实现日期级联效果
2014/01/23 Javascript
jQuery制作简洁的多级联动Select下拉框
2014/12/23 Javascript
javascript实现tab切换的两个实例
2015/11/05 Javascript
JavaScript性能优化总结之加载与执行
2016/08/11 Javascript
原生JavaScript制作计算器
2016/10/16 Javascript
JavaScript实现QQ聊天消息展示和评论提交功能
2017/05/22 Javascript
vue2.0+ 从插件开发到npm发布的示例代码
2018/04/28 Javascript
Bootstrap模态对话框中显示动态内容的方法
2018/08/10 Javascript
Bootstrap 模态框自定义点击和关闭事件详解
2018/08/10 Javascript
vue计算属性computed、事件、监听器watch的使用讲解
2019/01/21 Javascript
javascript验证form表单数据的案例详解
2019/03/25 Javascript
使用Layui搭建后台管理界面的操作方法
2019/09/20 Javascript
使用webpack搭建vue环境的教程详解
2019/12/31 Javascript
详解JavaScript 事件流
2020/09/02 Javascript
python中global用法实例分析
2015/04/30 Python
python中requests使用代理proxies方法介绍
2017/10/25 Python
python 读取鼠标点击坐标的实例
2018/12/29 Python
python导入模块交叉引用的方法
2019/01/19 Python
Python3 实现串口两进程同时读写
2019/06/12 Python
python将四元数变换为旋转矩阵的实例
2019/12/04 Python
css3高级选择器使用方法
2013/12/02 HTML / CSS
C#中类(class)与结构(struct)的异同
2013/11/03 面试题
品质主管的岗位职责
2013/12/04 职场文书
党员思想汇报范文
2013/12/30 职场文书
工程资料员岗位职责
2014/03/10 职场文书
《富饶的西沙群岛》教学反思
2014/04/09 职场文书
田径运动会通讯稿
2014/09/13 职场文书
2015年小学语文工作总结
2015/05/25 职场文书
使用springboot暴露oracle数据接口的问题
2021/05/07 Oracle