美文网首页
2.3 快速排序

2.3 快速排序

作者: EnjoyChen | 来源:发表于2017-07-22 09:09 被阅读0次

应用最广泛的排序算法:1:适用于各种不同的输入数据且在一般应用中比其他算法都要快。

它是原地排序(只需一个很小的栈),且将数组排序的运行时间是NlogN级别。

主要缺点:非常脆弱。

快速排序与归并排序对比

1.都是一种分治的排序算法

2.归并是将数组分成两个子数组分别排序,并将有序的子数组归并以将整个数组排序

快排是当两个子数组都有序时,整个数组也就有序了。

3.归并是递归调用发生在处理数组之前,快排是发生在处理数组之后。

4.归并是稳定排序,快排不稳定


二 性能特点

简洁性:切分方法的内循环会用一个递增的索引将数组元素和一个定值比较。归并排序和希尔排序一般比快速排序慢,其原因就是它们还在内循环移动数据。

比较次数很少。

基本实现有一个潜在的缺点:在切分不平衡时可能会极为低效。所以我们在快排前将数组随机排序。

总得来说,算法2.5的运行时间在1.39NlogN的某个常数因子的范围之内。归并排序也能做到这一点,但是快排一般会更快,因为它移动数据的次数更少。

三 算法改进

3.1 切换到插入排序

       排序小数组用插入排序

3.2 三取样切分

       使用子数组的一小部分元素的中位数来切分数组。这样做得到的切分更好,但代价是需要          计算中位数。

       人们发现将取样大小设为3并用大小居中的元素切分的效果最好。

3.3 熵最优的排序

        Dijkstra 三向切分的快速排序

        对于只有若干不同主键的随机数组,归并排序的时间复杂度是线性对数的,而三向切分快速排序则是线性的。

答疑

1.随机地将数组打乱似乎占了排序用时的一大部分,这么做值得吗?

值得。这能够防止出现最坏情况并使运行用时可以预计。

2.为什么都将注意力放在重复元素上?

这个问题直接影响到实际应用中的性能,一些老的实现对含有大量重复元素的数组排序时用时超过平方级别。

相关文章

  • alg4th-2.3快速排序

    [TOC] algorithm 4th(2.3)快速排序 快速排序 注意事项:partition的一次划分可以找出...

  • 2.3快速排序

    快速排序是使用的最广得排序算法.优点:简单,适用于不同的输入数据,在一般应用中比排序算法快.是一种原地排序(只需要...

  • 2.3 快速排序

    应用最广泛的排序算法:1:适用于各种不同的输入数据且在一般应用中比其他算法都要快。 它是原地排序(只需一个很小的栈...

  • 《算法》2.3-快速排序

    1.基本特点 ①原地排序(之U型要很小的辅助栈)②将长度为N的数组排序所需要的时间和NlgN成正比(平均排序)快速...

  • 2.3 快速排序 Quick Sort

    优点:原地排序将长度为 N 的数组排序所需的时间和 NlogN 成正比内循环比大多数排序算法都要短(更快)缺点:非...

  • 算法-排序算法总结

    排序类型总结 1 排序算法基础实现 2 排序算法应用 2.1 基础排序 2.2 计数排序应用 2.3 快排应用 2...

  • 七大排序算法之快速排序

    七大排序算法之快速排序 @(算法笔记)[排序算法, 快速排序, C++实现] [TOC] 快速排序的介绍: 快速排...

  • 面试准备--排序

    堆排序 快速排序(simple) 快速排序(regular) 归并排序 Shell排序 插入排序 选择排序 冒泡排序

  • 排序

    插入排序 选择排序 冒泡排序 归并排序 快速排序* 三路快速排序

  • 算法笔记01-排序#2

    快速排序敢叫快速排序,那它一定得快。 快速排序 概述 快速排序也是分治排序的典型,它快,而且是原地排序。不过,要防...

网友评论

      本文标题:2.3 快速排序

      本文链接:https://www.haomeiwen.com/subject/igllkxtx.html