几种sort的优劣势

本文深入探讨了快速排序、归并排序及堆排序等经典排序算法的实际应用与性能表现。通过对比不同排序方法的特点,如快速排序的高效缓存利用、归并排序的稳定性及其在外部排序中的优势,以及堆排序的空间时间最优特性,为读者提供了选择合适排序算法的依据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

quicksort有最好的实践效率。同时是in-place。配上random pivot/shuffle,median-
of-K 和 少量元素转insertion sort是最实用的排序方法。O(n^2)复杂度是极其小概率
事件,一般不会发生。同时因为其对硬件cache的应用效率较高,实践中Quicksort很难
被beat, 因为cache的访问速度比内存寻址快两个数量级。
递归不仅仅是存partition point,递归的过程中堆栈会存储所有function call 和相关变量的信息。
不过64bit的堆栈已经大幅简化了。



Mergesort的优势是stable以及在external sort中的使用. 理论分析时候的也会用到
worstcase n(log(n))。同时基本的merge想法和变形,不需要random access, 常常用
在很多其他问题的解决之中。比如说merge lists。但是megersort的constant factor
比较大,是quicksort的好几倍。一般比Quicksort慢。

Heapsort因为在时间上和空间上都是最优,在很多论文只要涉及到sort都会用它做理论
分析。constant factor还不错,比merge sort的好。但是它的致命弱点是对cache利用
的不好,比如说max-heapify的过程中,很少有相邻元素的处理。虽然有这些缺点,有
时小规模排序时还是有用。
Cache就是数据locality的问题。Cache都小,但是快。所以如果程序处理的数据都是连
续的,或者说有很好locality的特性,Cache hit概率就大,运行就快。
并不是涉及到交换的都是不stable,比如说insertion sort就是stable的。关键要看交
换的过程是怎么样的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值