资讯专栏INFORMATION COLUMN

PHP 快速排序算法

Coly / 805人阅读

摘要:概念这里借用百度百科的一张图来,非常形象快速排序算法是对冒泡算法的一个优化。获取已经打乱了顺序的数组快速排序这里引用的是我之前写的冒泡算法排序冒泡运行结果

概念

这里借用百度百科的一张图来,非常形象:

快速排序算法是对冒泡算法的一个优化。他的思想是先对数组进行分割, 把大的元素数值放到一个临时数组里,把小的元素数值放到另一个临时数组里(这个分割的点可以是数组中的任意一个元素值,一般用第一个元素,即$array[0]),然后继续把这两个临时数组重复上面拆分,最后把小的数组元素和大的数组元素合并起来。这里用到了递归的思想。

PHP实现
/*
    快速排序
*/

function quickSort($array)
{
    if(!isset($array[1]))
        return $array;
    $mid = $array[0]; //获取一个用于分割的关键字,一般是首个元素
    $leftArray = array(); 
    $rightArray = array();

    foreach($array as $v)
    {
        if($v > $mid)
            $rightArray[] = $v;  //把比$mid大的数放到一个数组里
        if($v < $mid)
            $leftArray[] = $v;   //把比$mid小的数放到另一个数组里
    }

    $leftArray = quickSort($leftArray); //把比较小的数组再一次进行分割
    $leftArray[] = $mid;        //把分割的元素加到小的数组后面,不能忘了它哦

    $rightArray = quickSort($rightArray);  //把比较大的数组再一次进行分割
    return array_merge($leftArray,$rightArray);  //组合两个结果
}
与冒泡算法对比

这里我与之前写的冒泡算法实现的排序做了个对比,可以看出这个算法比冒泡算法的效率要高很多。

$a = array_rand(range(1,3000), 1500);  //甚至在冒泡算法超过1600个元素的时候会出现内存不足的提示,但这里为了测出两个之间的差别大小, 就设置成了1500,保证冒泡算法也能执行完毕。
shuffle($a);  //获取已经打乱了顺序的数组
$t1 = microtime(true);
quickSort($a);  //快速排序
$t2 = microtime(true);
echo (($t2-$t1)*1000)."ms
"; require("./maopao.php"); //这里引用的是我之前写的冒泡算法排序 $t1 = microtime(true); maoPao($a); //冒泡 $t2 = microtime(true); echo (($t2-$t1)*1000)."ms";

运行结果:

12.10880279541ms
772.64094352722ms

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

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

相关文章

  • php 经典排序算法(解析)

    摘要:介绍三种排序算法快速排序选择排序冒泡排序选择排序选择排序是一种简单直观的排序算法。 介绍三种排序算法 快速排序 选择排序 冒泡排序 选择排序 选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法(比如序列[5, 5, 3...

    FuisonDesign 评论0 收藏0
  • PHP 算法 —— 快速排序

    摘要:算法原理下列动图来自五分钟学算法,演示了快速排序算法的原理和步骤。因此,快速排序的遍历次数最少是次。为什么最多是次这个应该非常简单,还是将快速排序看作一棵二叉树,它的深度最大是。 算法原理 下列动图来自@五分钟学算法,演示了快速排序算法的原理和步骤。 showImg(https://shockerli.net/media/15540242976690/quick.gif); 步骤: ...

    Apollo 评论0 收藏0
  • 快速排序算法图解与PHP实现讲解

    摘要:概述快速排序最初由东尼霍尔提出,是一种平均时间复杂度为,最差时间复杂度为的排序算法。测试算法效率与复杂度完全随机序列排序结果以下面的方法分别生成元素个数为万万的完全随机数组,并用快速排序算法对其排序。 概述 快速排序(QuickSort)最初由东尼·霍尔提出,是一种平均时间复杂度为showImg(https://segmentfault.com/img/bV5sdO?w=61&h=17...

    shleyZ 评论0 收藏0
  • PHP算法之四大基础算法

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

    isLishude 评论0 收藏0
  • PHP面试:尽可能多的说出你知道的排序算法

    摘要:良好的排序算法具有进行最少的比较和交换的特征。冒泡排序是一个基于比较的排序算法,被认为是效率最低的排序算法之一。现在让我们使用实现冒泡排序算法。插入排序到目前为止,我们已经看到了两种基于比较的排序算法。 预警 本文适合对于排序算法不太了解的新手同学观看,大佬直接忽略即可。因为考虑到连贯性,所以篇幅较长。老铁们看完需要大概一个小时,但是从入门到完全理解可能需要10个小时(哈哈哈,以我自己...

    objc94 评论0 收藏0

发表评论

0条评论

Coly

|高级讲师

TA的文章

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