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 相关文章推荐
php4的session功能评述(三)
Oct 09 PHP
?生?D片??C字串
Dec 06 PHP
PHP实现采集程序原理和简单示例代码
Mar 18 PHP
php项目打包方法
Feb 18 PHP
PHP集成百度Ueditor 1.4.3
Nov 23 PHP
php session 写入数据库
Feb 13 PHP
详解PHP原生DOM对象操作XML的方法
Oct 17 PHP
php版微信小店API二次开发及使用示例
Nov 12 PHP
PHP 无限级分类
May 04 PHP
php从数据库中读取特定的行(实例)
Jun 02 PHP
PHP如何根据文件头检测文件类型实例代码
Oct 14 PHP
PHP5中使用mysqli的prepare操作数据库的介绍
Mar 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
require(),include(),require_once()和include_once()的异同
2007/01/02 PHP
《PHP编程最快明白》第二讲 数字、浮点、布尔型、字符串和数组
2010/11/01 PHP
php设计模式 Composite (组合模式)
2011/06/26 PHP
php number_format() 函数通过千位分组来格式化数字的实现代码
2013/08/06 PHP
PHP调用全国天气预报数据接口查询天气示例
2019/02/20 PHP
PHP面向对象程序设计之对象的遍历操作示例
2019/06/12 PHP
动态改变textbox的宽高的js
2006/10/26 Javascript
Javascript获取窗口(容器)的大小及位置参数列举及简要说明
2012/12/09 Javascript
jQuery下实现等待指定元素加载完毕(可改成纯js版)
2013/07/11 Javascript
jQuery插件 selectToSelect使用方法
2013/10/02 Javascript
JavaScript通过元素的ID和name设置样式
2014/07/08 Javascript
分享2个jQuery插件--jquery.fileupload与artdialog
2014/12/26 Javascript
JavaScript中document对象使用详解
2015/01/06 Javascript
BootStrap的JS插件之轮播效果案例详解
2016/05/16 Javascript
jQuery简单验证上传文件大小及类型的方法
2016/06/02 Javascript
jQuery实现带遮罩层效果的blockUI弹出层示例【附demo源码下载】
2016/09/14 Javascript
easyui简介_动力节点Java学院整理
2017/07/14 Javascript
nodejs结合socket.io实现websocket通信功能的方法
2018/01/12 NodeJs
Vue组件通信的四种方式汇总
2018/02/08 Javascript
浅谈vue 二级路由嵌套和二级路由高亮问题
2020/08/06 Javascript
[49:20]2014 DOTA2国际邀请赛中国区预选赛5.21 CIS VS TongFu
2014/05/22 DOTA
Python 常用string函数详解
2016/05/30 Python
Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例
2018/07/27 Python
用Python中的turtle模块画图两只小羊方法
2019/04/09 Python
简单了解Python matplotlib线的属性
2019/06/29 Python
python unichr函数知识点总结
2020/12/16 Python
Python的Tqdm模块实现进度条配置
2021/02/24 Python
汇集了世界上最好的天然和有机美容产品:LoveLula
2018/02/05 全球购物
ParcelABC西班牙:包裹运送和快递服务
2019/12/24 全球购物
预备党员表决心书
2014/03/11 职场文书
温馨提示标语
2014/06/26 职场文书
2014办公室副主任四风对照检查材料思想汇报
2014/09/20 职场文书
大班下学期个人总结
2015/02/13 职场文书
php中pcntl_fork详解
2021/04/01 PHP
MySQL基于索引的压力测试的实现
2021/11/07 MySQL
ICOM R71E和R72E图文对比解说
2022/04/07 无线电