场景"/>
快速排序、归并排序、堆排序的理解及各自应用场景
一、问题背景
我们常常在做各类算法题的时候,会遇到排序问题,这个时候就不得不提到快速排序、归并排序、堆排序几种稍微复杂一点的排序算法。那么我们理解各种算法的优势以及它们分别适用的业务场景则显得尤为重要。
首先我们知道三者的性质如下:
排序算法 | 时间复杂度 | 额外空间复杂度 | 稳定性 |
---|---|---|---|
归并排序 | O(N*logN) | O(N) | 有(相等时拷贝左组的即可) |
快速排序 | O(N*logN) | O(logN) | 无(小于区右扩,交换当前数和小于区最右侧的数时改变了相对顺序) |
堆排序 | O(N*logN) | O(1) | 无(调整为大根堆或小根堆时就改变了相对顺序) |
二、个人理解
- 当对于数据量大,数据分布高度随机的场景,快速排序的平均效率要高于 堆排序和 归并排序;
- 对于Top- K问题,堆排序性能的下限(时间复杂度O(nlogn)要高于快排;
- 归并排序适合链表排序但不适合数组排序;归并在外部排序,比如磁盘文件的情况下比快排好,因为快排很依赖数据的随机存取,而归并是顺序存取,对磁盘这种外存比较友好
- 快排和堆排都是
不稳定
排序,归并排序是稳定
排序。 - 实际场合中,快排对于数据量大,数据分布随机的平均效率高于堆排序,但如果数据大部分有序发现快排明显退化的时候会切换到堆排,快排递归到比较小的数据量的时候为了节约递归产生的空间,也会切换成插入排序;
更多推荐
快速排序、归并排序、堆排序的理解及各自应用场景
发布评论