博客
关于我
数据结构常见排序算法——快速排序(定义、特征、递归和非递归实现、优化、快速排序 Vs. 归并排序 Vs. 堆排序)
阅读量:525 次
发布时间:2019-03-08

本文共 558 字,大约阅读时间需要 1 分钟。

快速排序

定义

快速排序的基本思想是通过一轮排序将数据分成两个独立的部分,其中一部分的值均小于另一部分的值。这种方法通过减少比较次数,降低了排序时间。

特征

  • 最优时间复杂度:O(nlogn)
  • 最差时间复杂度:O(n2)
  • 不稳定性:快速排序在交换过程中可能改变相同元素的顺序,因此是不稳定的排序算法。
  • 最坏排序场景:当基准值将数组分割成一个单元素子数组和另一个n-1元素子数组时,快速排序的性能会退化为冒泡排序。
  • 平均时间复杂性:O(nlogn)(假设基准值的位置是均匀随机的)。
  • 优化方法

  • 随机基准选择:虽然在最坏情况下仍然可能出现劣质分割,但随机化的概率极低。
  • 三数取中法:使用数组前三个或者后三个元素的中值作为基准,减少预排序数据带来的性能问题。
  • 打乱排序性:通过打乱原始数组,可以有效减少结sort在预排序数据中的性能问题。
  • 与其他排序算法的比较

  • 与堆排序的比较

    • 堆排序的最坏情况也是O(nlogn),但在实际应用中表现较慢。
    • 堆排序需要固定额外的存储空间,而快速排序在递归实现下需要的栈空间为O(logn),在最坏情况下则需要O(n)的栈空间。
  • 与归并排序的比较

    • 归并排序是一个稳定排序,但需要额外的空间复制数据。
    • 归并排序需要较多的比较次数,当数据量较大时,归并操作的开销也会显著增加快速排序的优势。
  • 参考

    转载地址:http://ovuiz.baihongyu.com/

    你可能感兴趣的文章
    Netty源码—6.ByteBuf原理二
    查看>>
    Netty源码—7.ByteBuf原理三
    查看>>
    Netty源码—7.ByteBuf原理四
    查看>>
    Netty的Socket编程详解-搭建服务端与客户端并进行数据传输
    查看>>
    Network Dissection:Quantifying Interpretability of Deep Visual Representations(深层视觉表征的量化解释)
    查看>>
    Network Sniffer and Connection Analyzer
    查看>>
    Nginx Location配置总结
    查看>>
    Nginx 反向代理解决跨域问题
    查看>>
    nginx 后端获取真实ip
    查看>>
    Nginx 学习总结(17)—— 8 个免费开源 Nginx 管理系统,轻松管理 Nginx 站点配置
    查看>>
    nginx 常用配置记录
    查看>>
    Nginx 我们必须知道的那些事
    查看>>
    nginx 配置~~~本身就是一个静态资源的服务器
    查看>>
    Nio ByteBuffer组件读写指针切换原理与常用方法
    查看>>
    NLP 基于kashgari和BERT实现中文命名实体识别(NER)
    查看>>
    No 'Access-Control-Allow-Origin' header is present on the requested resource.
    查看>>
    nullnullHuge Pages
    查看>>
    Numpy如何使用np.umprod重写range函数中i的python
    查看>>
    oauth2-shiro 添加 redis 实现版本
    查看>>
    OAuth2.0_JWT令牌-生成令牌和校验令牌_Spring Security OAuth2.0认证授权---springcloud工作笔记148
    查看>>