C++抽象编程——算法分析(7)——快速排序算法分析
来源:互联网 发布:单片机pwm调速原理 编辑:程序博客网 时间:2024/06/16 08:00
合并排序和Quicksort算法的实际运行时间的头对头比较如下图所示。Quicksort的这种实现往往比合并排序的执行速度快几倍,这是程序员在实践中更频繁地使用它的原因之一。此外,两种算法的运行时间似乎以大致相同的方式增长。
然而,上图所示的实证结果掩盖了重要的一点:只要Quicksort算法选择一个接近于向量中值的枢轴,分区步骤就会将向量划分成大致相等的部分。如果算法选择其枢轴值较差,则两个部分向量中的一个可能比另一个部分向量大得多,这违反了分治策略的目的。在具有随机选择的元素的向量中,Quicksort往往表现良好,平均情况下为O(N log N)。在最坏的情况下(这个矛盾的是由已经排序的向量组成 )性能退化为O(N^2)。尽管在最坏的情况下这种行为很差,但是Quicksort在实践中比大多数其他算法要快得多,它已经成为一般分类过程的标准选择。
我们可以使用几种策略来增加枢纽实际上接近向量中值的可能性。一个简单的方法是让Quicksort实现随机选择pivot元素。虽然随机过程仍然可能选择不良的枢轴值,但是在递归分解的每个级别都不太可能会发生相同的错误。此外,原始vector的分布总是不好的。 给定任何输入,随机选择枢轴确保该向量的平均情况性能为O(N log N)。另一种方法是从vector中选择一些值,通常为三或五个,并选择这些值的中位数作为枢轴。
当你尝试以这种方式改进算法时,你必须要小心谨慎。选择好的枢轴可以提高性能,但也花费一些时间。 如果算法花费更多的时间选择枢纽,但是却没能做出一个好的选择,你将最终减缓实现,而不是加快速度。
阅读全文
0 0
- C++抽象编程——算法分析(7)——快速排序算法分析
- C++抽象编程——算法分析(6)——快速排序算法
- C++抽象编程——算法分析(8)——插入排序算法与分析
- C++抽象编程——算法分析(4)——合并排序算法
- 《数据结构与算法分析(c描述》—— 快速排序
- 排序算法—快速排序算法分析与实现(Python)
- C++抽象编程——算法分析(1)——选择排序
- 实用算法的分析与程序设计——分治算法(归并排序,快速排序)
- 数据结构与算法分析——快速排序
- 算法分析之——quick-sort快速排序
- 算法分析——分治思想之快速排序
- 算法分析之排序:交换排序之二——快速排序(QuickSort)
- 常用的排序算法性能分析(2)—— 归并排序、快速排序
- 数据结构与算法分析(Java语言描述)(7)—— 快速排序
- MIT:算法导论——4.2快速排序 以及 排序算法时间复杂度分析
- 快速排序算法分析
- 快速排序算法分析
- 快速排序算法分析
- spring+hibernate出错小结
- 模仿R语言c++ 向量类c 矩阵类matrix等(持续更新 欢迎指点)
- Java监听器
- docker学习
- 猜数字小游戏(有次数限制)
- C++抽象编程——算法分析(7)——快速排序算法分析
- 事件绑定方法live和bind的区别及使用场合
- Eclipse 安装 SVN 插件的两种方法
- java多线程(五) 之 设计线程安全的类
- ORA-00494: enqueue [CF] held for too long (more than 900 seconds) cause instance crash
- 网络编程·十二
- mysql GROUP BY count(*) 数据库按照月份分组在同一张表中 计算数量
- java中Collections.sort排序详解
- RS232实现串口双向通讯