资讯专栏INFORMATION COLUMN

PHP排序算法之快速排序

CoderDock / 1946人阅读

摘要:实现代码判断参数是否是一个数组递归出口数组长度为,直接返回数组数组元素有多个,则定义两个数组循环遍历数组,把第一个元素当做比较的对象判断当前元素的大小递归调用将所有的结果合并

原理:找到当前数组中的任意一个元素(一般选择第一个元素),作为标准,新建两个空数组left、rignt,遍历整个数组元素,如果遍历到的元素比当前的元素小就放到数组left,比当前的元素大放到rignt,然后再对新数组进行同样的操作。

递归:
递归是一种函数调用自身的机制。
递归必须要有边界条件,也就是递归出口(退出递归)
递归前进段和递归返回段,也就是最后得到的值
当边界条件不满足时,递归前进;当边界条件(递归出口)满足是,递归返回。
PHP的递归非常消耗性能,尽量避免使用。

快速排序的原理复合递归原理
递归点:如果数组元素大于1,就需要再进行分解,所以我们的递归点就是新构造的数组元素个数大于1
递归出口:当数组元素个数为1,不需再对新数组进行排序。

实现代码:

$arr = [34,56,7,89,12,9];
function quick_sort($arr)
{

// 判断参数是否是一个数组
if(!is_array($arr)) return false;
// 递归出口:数组长度为1,直接返回数组
$length = count($arr);
if($length <= 1) return $arr;
// 数组元素有多个,则定义两个数组
$left = $right = [];
// 循环遍历数组,把第一个元素当做比较的对象
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,[$arr[0]],$right);

}
print_r(quick_sort($arr));

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/29228.html

相关文章

  • PHP算法四大基础算法

    摘要:而在证明算法是正确的基础上,第二步就是分析算法的时间复杂度。算法的时间复杂度反映了程序执行时间随输入规模增长而增长的量级,在很大程度上能很好反映出算法的优劣与否。 showImg(https://segmentfault.com/img/remote/1460000016451712?w=800&h=341); 前言 虽然工作中,你觉得自己并没有涉及到算法这方面的东西,但是算法是程序的...

    isLishude 评论0 收藏0
  • 利用PHP实现常用的数据结构排序(小白系列文章七)

    摘要:排序严格来说不算数据结构,更应该归于算法一类,因为数据结构指的是数据与数据之间的关系,排序参与其中,更多的是让数据状态发生了改变。 排序严格来说不算数据结构,更应该归于算法一类,因为数据结构指的是数据与数据之间的关系,排序参与其中,更多的是让数据状态发生了改变。于是,我们开始用PHP来聊聊算法。 引子 其实有一句话说的是不错的,不必重复造轮子,所以下面我将引用别人的文章作为本文的引文,...

    jayzou 评论0 收藏0
  • PHP面试四:逻辑与算法

    摘要:数据结构常见数据结构数组是最简单而且应用最广泛的数据结构特征使用连续内存空间来存储存放相同类型或着衍生类型的元素数组比较特别,可以存放八种数据类型通过下标来访问集合特征保存不重复的元素字典特征就是关联数组,以形式存储栈,与队列相似特征存储数 数据结构 常见数据结构 Array 数组是 最简单 而且 应用最广泛 的数据结构 特征: 1、使用连续内存空间来存储 2、存放相同类型或着衍生类型...

    smartlion 评论0 收藏0
  • PHP基础算法快速排序

    摘要:快速排序法判断参数是否是一个数组递归出口数组长度为,直接返回数组数组元素有多个则定义两个空数组使用循环进行遍历,把第一个元素当做比较的对象判断当前元素的大小递归调用将所有的结果合并

    raoyi 评论0 收藏0
  • 求非负元素数组所有元素能组合的最大字符串

    摘要:寻找非零元素数组中所有元素排列组合后的最大值待排序数组排序方法参数校验排序算法快速排序冒泡排序拼接用例测试这里只对快速排序方法使用组测试用例并列举如下。 首发于 樊浩柏科学院 问题叙述:将一个非负元素数组中的所有元素排列组合在一起,找出值最大的那个排列情况。例如 [0, 9, 523, 94, 10, 4],排列组合后值最大数为:9945234100。 showImg(https:/...

    xiongzenghui 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<