快速排序法

1. 快速排序

介绍:

快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来,且在大部分真实世界的数据,可以决定设计的选择,减少所需时间的二次方项之可能性。

步骤:

  1. 从数列中挑出一个元素,称为 “基准”(pivot),
  2. 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。
  3. 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
    20140729094606701.png
Visual-and-intuitive-feel-of-7-common-sorting-algorithms.gif

通过下面这段代码来了解下:所谓快速排序法其实运用的是分治法,将问题分解为规模更小的子问题,将这些规模更小的子问题逐个击破,将已解决的子问题合并,最终得出“母”问题的解;

function sort()
    {
        $sort = [3, 1, 2, 6, 9, 4, 7, 8, 5];
        $sort = $this->quick_sort($sort);
    }
function quick_sort($array)
    {
        if (count($array) <= 1) {
            return $array;
        }
        $key = $array[0];

        $rightArray = array();
        $leftArray = array();
        for ($i = 1; $i < count($array); $i++) {
            if ($array[$i] >= $key) {
                $rightArray[] = $array[$i];
            } else {
                $leftArray[] = $array[$i];
            }
        }
        echo "k:" . $key . "<br>";
        echo "l:" . json_encode($leftArray) . "<br>";
        echo "r:" . json_encode($rightArray) . "<br>";
        echo "<hr>";
        $leftArray = $this->quick_sort($leftArray);
        $rightArray = $this->quick_sort($rightArray);
        
        return array_merge($leftArray, array($key), $rightArray);
    }

输出结果:

k:3
l:[1,2]
r:[6,9,4,7,8,5]
-----------------------------------------
k:1
l:[]
r:[2]
-----------------------------------------
k:6
l:[4,5]
r:[9,7,8]
-----------------------------------------
k:4
l:[]
r:[5]
-----------------------------------------
k:9
l:[7,8]
r:[]
-----------------------------------------
k:7
l:[]
r:[8]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Hello,大家好,今天继续排序系列之二讲☞《快速排序法》!在平均状况下,排序 n 个项目要Ο(n log ...
    Leon_Geo阅读 3,733评论 0 1
  • 算法步骤: 1:从数列中挑选一个元素,称为“基准”, 2:重新排序数列,所有元素比基准小的值摆放在基准前,所有元素...
    d4999f3d52df阅读 3,056评论 0 0
  • 一、简介 通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另外一部分记录的关键字小,则可分别对...
    野狗子嗷嗷嗷阅读 3,550评论 0 0
  •   快速排序(Quick Sort)法和冒泡排序法类似,都是基于交换排序思想的。快速排序对冒泡排序法进行了改进,从...
    一笑小先生阅读 3,056评论 0 1
  • Hello,大家好,今天继续排序系列之六讲☞《快速排序法进阶》,之所以称为进阶,那肯定是因为比vision...
    Leon_Geo阅读 4,322评论 2 2

友情链接更多精彩内容