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和ACCESS写聊天室(三)
Oct 09 PHP
PHP与MySQL开发中页面乱码的产生与解决
Mar 27 PHP
php 什么是PEAR?(第二篇)
Mar 19 PHP
phpmyadmin MySQL 加密配置方法
Jul 05 PHP
非常精妙的PHP递归调用与静态变量使用
Dec 16 PHP
解析使用substr截取UTF-8中文字符串出现乱码的问题
Jun 20 PHP
Codeigniter校验ip地址的方法
Mar 21 PHP
Yii实现Command任务处理的方法详解
Jul 14 PHP
PHP PDOStatement::getColumnMeta讲解
Feb 01 PHP
PHP面向对象程序设计子类扩展父类(子类重新载入父类)操作详解
Jun 14 PHP
php设计模式之观察者模式定义与用法经典示例
Sep 19 PHP
Linux系统下安装PHP7.3版本
Jun 26 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 mysql_query执行超时(Fatal error: Maximum execution time …)
2013/07/03 PHP
php格式化时间戳显示友好的时间实现思路及代码
2014/10/23 PHP
jquery 必填项判断表单是否为空的方法
2008/09/14 Javascript
JavaScript是否可实现多线程  深入理解JavaScript定时机制
2009/12/22 Javascript
JavaScript/jQuery 表单美化插件小结
2012/02/14 Javascript
js取值中form.all和不加all的区别介绍
2014/01/20 Javascript
JavaScript按位运算符的应用简析
2014/02/04 Javascript
用jquery.sortElements实现table排序
2014/05/04 Javascript
js实现图片在未加载完成前显示加载中字样
2014/09/03 Javascript
JavaScript创建对象的方式小结(4种方式)
2015/12/17 Javascript
快速掌握Node.js环境的安装与运行方法
2016/02/16 Javascript
jquery实现无刷新验证码的简单实例
2016/05/19 Javascript
js 声明数组和向数组中添加对象变量的简单实例
2016/07/28 Javascript
laypage+SpringMVC实现后端分页
2019/07/27 Javascript
vue 获取及修改store.js里的公共变量实例
2019/11/06 Javascript
jQuery轮播图功能制作方法详解
2019/12/03 jQuery
jQuery操作动画完整实例分析
2020/01/10 jQuery
ant design vue中日期选择框混合时间选择器的用法说明
2020/10/27 Javascript
vue使用vue-quill-editor富文本编辑器且将图片上传到服务器的功能
2021/01/13 Vue.js
[42:00]完美世界DOTA2联赛PWL S3 Phoenix vs INK ICE 第一场 12.13
2020/12/17 DOTA
python实现进程间通信简单实例
2014/07/23 Python
对于Python的Django框架部署的一些建议
2015/04/09 Python
在Python中操作文件之seek()方法的使用教程
2015/05/24 Python
Django中对通过测试的用户进行限制访问的方法
2015/07/23 Python
Pycharm无法显示动态图片的解决方法
2018/10/28 Python
Python把对应格式的csv文件转换成字典类型存储脚本的方法
2019/02/12 Python
python 多维高斯分布数据生成方式
2019/12/09 Python
Lookfantastic美国/加拿大:英国知名美妆购物网站
2019/03/27 全球购物
铁路安全事故反思
2014/04/26 职场文书
党性心得体会
2014/09/03 职场文书
教师辞职信范文
2015/02/28 职场文书
2016大学自主招生推荐信范文
2015/03/23 职场文书
惹女朋友生气检讨书
2015/05/06 职场文书
2019大学生暑期实习心得总结
2019/08/21 职场文书
雄兵连:第三季先行图公开,天使恶魔联合,银河之力的新力量
2021/06/11 国漫
Oracle 触发器trigger使用案例
2022/02/24 Oracle