快速排序算法

快速排序算法是一种高效的排序算法,由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),这通常发生在数组已经接近有序或者基准选择不当的情况下。为了避免这种情况,实际应用中通常会采用一些策略来选择基准,比如三数取中法。


__EOF__

本文作者留言本
本文链接https://www.cnblogs.com/Adaking/p/18515674.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   ~博客~  阅读(56)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
点击右上角即可分享
微信分享提示