快速排序算法是一种高效的排序算法,由C. A. R. Hoare在1960年提出。它的基本思想是分而治之,通过一趟排序将待排序的元素分割成两个部分,其中一部分的所有元素都比另一部分的所有元素小,然后递归地对这两部分继续进行排序操作,整个排序过程可以递归进行,以达到整个数据变成有序序列。
快速排序算法的操作流程如下:
-
选择基准元素(Pivot):
从数组中选择一个元素作为基准元素(Pivot)。选择方法可以是数组的第一个元素、最后一个元素、中间元素或者随机元素。 -
分区操作(Partitioning):
重新排列数组,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面。在这个分区退出之后,该基准就处于数组的中间位置。这个称为分区(partition)操作。 -
递归排序:
递归地将小于基准值的子数组和大于基准值的子数组排序。 -
递归终止条件:
当子数组的大小减少到1或0时,递归结束。
快速排序算法的伪代码如下:
快速排序(数组A,左索引L,右索引R)
如果 L < R
则 P := 分区(A, L, R)
快速排序(A, L, P - 1) // 排序基准左侧的子数组
快速排序(A, P + 1, R) // 排序基准右侧的子数组
结束如果
结束快速排序
分区(数组A,左索引L,右索引R)
选择A[R]作为基准
i := L - 1
对于 j := L 到 R - 1
如果 A[j] < 基准
i := i + 1
交换 A[i] 和 A[j]
结束如果
结束对于
交换 A[i + 1] 和 A[R]
返回 i + 1
结束分区
快速排序的平均时间复杂度为O(n log n),但在最坏情况下会退化到O(n^2),这通常发生在数组已经接近有序或者基准选择不当的情况下。为了避免这种情况,实际应用中通常会采用一些策略来选择基准,比如三数取中法。
标签:递归,基准,元素,算法,数组,排序,快速 From: https://www.cnblogs.com/Adaking/p/18515674