算法系列 - 快速排序

Posted 笨小孩要努力

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法系列 - 快速排序相关的知识,希望对你有一定的参考价值。

本文是看了《啊哈!算法》这本书里面的快速排序算法后的学习记录。

顺便推荐下《啊哈!算法》这本书,一本能看懂的非常有趣的算法书。

    基本原理:

            对于给定的一组记录,选择一个基准元素,通常选择第一个元素或者最后一个元素,通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素,此时基准元素在其排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分,直到序列中的所有记录均有序为止。

    示例图解:

            现在对“6  1  2 7  9  3  4  5 10  8”这个10个数进行排序。方法其实很简单:选择6作为基准数(第一个元素),分别从初始序列“6  1  2 7  9  3  4  5 10  8”两端开始“探测”。先从右往左找一个小于6的数,再从左往右找一个大于6的数,然后交换他们。

            

    上图是第一趟排序的过程图,第一趟排序后,基准数6归位,并且基准数6左边的数字全部小于6,基准数6右边的数字全部大于6。将基准数6左边、右边的数据分别递归执行同第一趟一样的排序算法。最终得到有序的数据序列1 2 3 4 5 6 7 8 9 10。

    引用《啊哈!算法》里面的一张图~形象的描述下整个算法的处理过程

    算法系列 - 快速排序

    代码练习(java版)

    总结:

    快速排序由C. A. R. Hoare在1962年提出。快速排序时间复杂度:O (nlogn)

    以上是关于算法系列 - 快速排序的主要内容,如果未能解决你的问题,请参考以下文章

    排序算法系列——快速排序

    算法-排序系列04之快速排序

    白话经典算法系列之六 快速排序 快速搞定 转

    基础算法系列之排序算法[快速排序,归并排序,二分查找]

    JavaScriptPythonjavaGo算法系列之快速排序篇

    归并排序和快速排序(算法系列)