美文网首页
快速排序法

快速排序法

作者: 拉风的老衲 | 来源:发表于2018-06-01 14:16 被阅读0次

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]

相关文章

  • 排序算法总结

    选择排序法 插入排序法 冒泡排序法 归并排序法 自顶向下 自底向上 快速排序法 单路快速排序法 双路快速排序法 三...

  • iOS常见算法

    升序算法:用冒泡排序法 选择排序法 快速排序

  • 排序算法篇_快速排序法

      快速排序(Quick Sort)法和冒泡排序法类似,都是基于交换排序思想的。快速排序对冒泡排序法进行了改进,从...

  • 《python算法教程》Day9 - 快速排序法

    这是《python算法教程》第9篇读书笔记,笔记的主要内容为快速排序法。 快速排序法简介 快速排序法运用分治法的方...

  • 排序算法

    排序算法分类 排序算法常用主要有:冒泡排序法、快速排序法、选择排序法、插入排序法、堆排序法、归并排序法等几种。 ...

  • php实现几种常见的排序方法

    1. 冒泡排序法: 2. 选择排序法: 3.插入排序法: 4.快速排序法:

  • 3种排序

    冒泡排序 插入排序 快速排序法

  • js 常见排序算法(快速排序,选择排序等)

    快速排序法 选择排序 插入排序 冒泡排序

  • 常用的排序算法

    1. 冒泡排序: 2.快速排序法 3.插入排序法 4.选择排序法 5.归并排序法

  • 数组相关处理函数2

    冒泡排序法 快速排序法 数组排序函数 ksort 对数组按照键名排序 krsort 键名降序排序 asort 对数...

网友评论

      本文标题:快速排序法

      本文链接:https://www.haomeiwen.com/subject/atmhsftx.html