排序:五. 快速排序(将“基准”前,后不符合规则的元素交换)

2018-12-14  本文已影响0人  DJN_

参考文章

快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort)。
时间复杂度O(nlog2n),最坏状况下O(n2),但这种状况并不常见。

事实上,快速排序通常明显比其他O(nlog2n)算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。


image.png

快速排序使用分治法策略来把一个序列分为两个子序列。

步骤为:

  1. 选取“基准”:从数列中挑出一个元素,称为"基准"(pivot)
  2. 分区(partition)操作:重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面(相同的数可以到任何一边)。在这个分区结束之后,该基准就处于数列的中间位置。
  3. 递归地把小于基准值元素的子数列和大于基准值元素的子数列排序。
    递归到最底部时,数列的大小是零或一,也就是已经排序好了。

这个算法一定会结束,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。(最终排好序时其应该在的位置)

实现类为 QuickSort

image.png
算法描述如下:
取中间位置元素为“基准”
取“基准”以左最左元素为“头”
取“基准”以右最右元素为“尾”
从两端向中间遍历:
找到“头”往后第一个不小于“基准”的元素a及其下标i
找到“尾”往前第一个不大于“基准”的元素b及其下标j
如果i<j,交换a和b,继续循环;
如果i==j,此次排序结束,开始下一次递归
如果i>j,结束循环,此次排序结束,开始下一次递归

代码已上传 GitHub,可以在 这里 找到

上一篇 下一篇

猜你喜欢

热点阅读