左程云 算法与数据结构基础班

本文探讨了如何优化排序算法,指出在实现通用的高性能排序函数时,通常选择时间复杂度为O(nlogn)的算法。尽管归并排序的时间复杂度相同,但由于其空间复杂度较高,不适用于大数据量排序。快速排序在适当优化,如三数取中法选择分区点后,能有效避免最坏情况。Glibc的qsort()函数结合了归并排序和快速排序,对小数据量使用归并排序,大数据量则切换到快速排序,并在元素数量小于等于4时使用插入排序,实现了性能与空间效率的平衡。
摘要由CSDN通过智能技术生成

排序优化

在C++的STL中为我们提供了很多排序函数如sort、stable_sort等等,平时我们也会直接使用这些现成的排序函数,为了让我们更加深层的了解底层的排序函数,现在我们从如何实现一个通用的、高性能的排序函数这个问题出发,进而更加全面的理解排序算法。

https://pan.baidu.com/s/1izhWFEqCNhi2LK3MApk6ng?pwd=n4xy

线性排序算法的时间复杂度比较低,适用场景比较特殊。所以如果要写一个通用的排序函数,不能选择线性排序算法。如果对于小规模数据进行排序,可以选择时间复杂度是O(n²)的算法;如果对大规模数据进行排序,时间复杂度是O(nlogn)的算法更加高效。所以,为了兼顾任意规模数据的排序,一般都会首选时间复杂度为O(nlogn)的排序算法来实现排序函数。

时间复杂度是O(nlogn)的排序算法不止一个,我们已经知道的有归并排序、快速排序,后面还会了解一种叫堆排序的排序算法。其中堆排序和快速排序都有比较多的应用,比如Java语言采用堆排序实现排序函数,而C++中采用了快排实现排序函数(后面我们会具体讲解)。

但是我们发现,貌似同样时间复杂度为O(nlogn)的归并排序却不经常被使用,这是因为归并排序并不是原地排序算法,它的空间复杂度为O(n)。所以说,当我们在为数据量比较大的文件排序时,除了数据本身占用的内存之外,我们还需要额外占用很大内存空间,所需的空间耗费就翻倍了。因此,考虑到空

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值