• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    PHP快速排序算法实现的原理及代码详解

    算法原理

    下列动图来自五分钟学算法,演示了快速排序算法的原理和步骤。

    步骤:

    从数组中选个基准值

    将数组中大于基准值的放同一边、小于基准值的放另一边,基准值位于中间位置

    递归的对分列两边的数组再排序

    代码实现

    function quickSort($arr)
    
    {
    
     $len = count($arr);
    
     if ($len = 1) {
    
      return $arr;
    
     }
    
     
    
     $v = $arr[0];
    
     $low = $up = array();
    
     for ($i = 1; $i  $len; ++$i) {
    
      if ($arr[$i] > $v) {
    
       $up[] = $arr[$i];
    
      } else {
    
       $low[] = $arr[$i];
    
      }
    
     }
    
     $low = quickSort($low);
    
     $up = quickSort($up);
    
     
    
     return array_merge($low, array($v), $up);
    
    }

    测试代码:

    $startTime = microtime(1);
    
     
    
    $arr = range(1, 10);
    
    shuffle($arr);
    
     
    
    echo "before sort: ", implode(', ', $arr), "\n";
    
    $sortArr = quickSort($arr);
    
    echo "after sort: ", implode(', ', $sortArr), "\n";
    
     
    
    echo "use time: ", microtime(1) - $startTime, "s\n";

    测试结果:

    before sort: 1, 7, 10, 9, 6, 3, 2, 5, 4, 8
    
    after sort: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
    
    use time: 0.0009009838104248s

    时间复杂度

    快速排序的时间复杂度在最坏情况下是O(N2),平均的时间复杂度是O(N*lgN)。

    这句话很好理解:假设被排序的数列中有N个数。遍历一次的时间复杂度是O(N),需要遍历多少次呢?至少lg(N+1)次,最多N次。

    1) 为什么最少是lg(N+1)次?快速排序是采用的分治法进行遍历的,我们将它看作一棵二叉树,它需要遍历的次数就是二叉树的深度,而根据完全二叉树的定义,它的深度至少是lg(N+1)。因此,快速排序的遍历次数最少是lg(N+1)次。

    2) 为什么最多是N次?这个应该非常简单,还是将快速排序看作一棵二叉树,它的深度最大是N。因此,快读排序的遍历次数最多是N次。

    您可能感兴趣的文章:
    • PHP快速排序算法实例分析
    • PHP四种排序算法实现及效率分析【冒泡排序,插入排序,选择排序和快速排序】
    • PHP排序算法之快速排序(Quick Sort)及其优化算法详解
    • PHP递归实现快速排序的方法示例
    • php 二维数组快速排序算法的实现代码
    • PHP常用排序算法实例小结【基本排序,冒泡排序,快速排序,插入排序】
    • PHP快速排序quicksort实例详解
    上一篇:Laravel5.7框架安装与使用学习笔记图文详解
    下一篇:从ThinkPHP3.2.3过渡到ThinkPHP5.0学习笔记图文详解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    PHP快速排序算法实现的原理及代码详解 PHP,快速,排序,算法,实现,