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