快速排序算法

快速排序算法是一种高效的排序算法,由C. A. R. Hoare在1960年提出。它的基本思想是分而治之,通过一趟排序将待排序的元素分割成两个部分,其中一部分的所有元素都比另一部分的所有元素小,然后递归地对这两部分继续进行排序操作,整个排序过程可以递归进行,以达到整个数据变成有序序列。

快速排序算法的操作流程如下:

  1. 选择基准元素(Pivot)
    从数组中选择一个元素作为基准元素(Pivot)。选择方法可以是数组的第一个元素、最后一个元素、中间元素或者随机元素。

  2. 分区操作(Partitioning)
    重新排列数组,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面。在这个分区退出之后,该基准就处于数组的中间位置。这个称为分区(partition)操作。

  3. 递归排序
    递归地将小于基准值的子数组和大于基准值的子数组排序。

  4. 递归终止条件
    当子数组的大小减少到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),这通常发生在数组已经接近有序或者基准选择不当的情况下。为了避免这种情况,实际应用中通常会采用一些策略来选择基准,比如三数取中法。

posted @ 2024-10-30 13:34  ~博客~  阅读(94)  评论(0)    收藏  举报