博客
关于我
数据结构常见排序算法——快速排序(定义、特征、递归和非递归实现、优化、快速排序 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/

    你可能感兴趣的文章
    MySql索引为什么使用B+树
    查看>>
    WARNING!VisualDDK wizard was unable to find any DDK/WDK installed on your system.
    查看>>
    mysql索引创建和使用注意事项
    查看>>
    MySQL索引原理以及查询优化
    查看>>
    Mysql索引底层结构的分析
    查看>>
    MySQL索引底层:B+树详解
    查看>>
    Mysql索引总结
    查看>>
    MySQL索引背后的数据结构及算法原理
    查看>>
    mysql经常使用命令
    查看>>
    MySQL缓存使用率超过80%的解决方法
    查看>>
    Mysql缓存调优的基本知识(附Demo)
    查看>>
    mysql网站打开慢问题排查&数据库优化
    查看>>
    mysql自动化同步校验_Shell: 分享MySQL数据同步+主从复制自动化脚本_20190313_七侠镇莫尛貝...
    查看>>
    mysql自增id超大问题查询
    查看>>
    MySQL获取分组后的TOP 1和TOP N记录
    查看>>
    MySQL蜜罐反制获取攻击者信息
    查看>>
    Mysql表创建外键报错
    查看>>
    mysql表格调取数据库信息_MySQL™ 参考手册(获取有关数据库和表的信息)
    查看>>
    MySQL视图
    查看>>
    mysql视图建立MERGE算法和TEMPTABLE算法的区别(效率与表锁定问题)
    查看>>