在C ++中,我需要尽可能快地对我编写的数组进行排序, 我的问题是什么是最好和最快的排序功能? 或者只用自己制造一个?
答案 0 :(得分:19)
使用std::sort
函数,该函数通常默认为快速排序(但处理丑陋的边缘情况,例如完全排序的数组,花费O(n ^ 2)时间)。
然后测量速度:如果不够好,请描述详细信息(例如,您的数组有多大,它们包含哪些数据,是否存在大量等效元素并且稳定性很重要),并获得进一步的建议。不要因为Knuth的爱而实施自己的排序功能,除非你有一些非常独特的要求!
答案 1 :(得分:6)
使用std::sort
答案 2 :(得分:2)
我认为如果你有足够的时间,可以通过一些sorting algorithms来帮助你解决问题
答案 3 :(得分:2)
如果您的钥匙尺寸较小(例如整数)并且您的排序典型超过500件,请使用Radix-或Bucket排序。
否则使用introsort:http://en.wikipedia.org/wiki/Introsort您可能也想尝试std :: sort。通常它只是一个introsort的实现。
答案 4 :(得分:2)
无论你做什么,不要试图制作自己的排序算法,除非你真的知道你在做什么,并且你有一些非常不寻常的要求。
答案 5 :(得分:0)
使用QuickSort功能(qsort)
答案 6 :(得分:0)
虽然单凭qsort很可能是更安全的选择,但如果你真的非常渴望速度,你必须更多地了解具体情况。
一般来说,排序方法被认为是“更好”的,因为它们可以很好地扩展到大型数据集,并且可以在一般情况下优雅地工作,而不会对边角情况产生病态错误的结果(比如排序几乎完全排序的数组,或者反向排列的数组)订购)。
因此,当你看一般的排序方法(大量文献)时,请记住,如果你的特定应用程序必须处理大量的小型(比如10-12项)阵列。或者非常大的阵列。或者如果记忆有限。或者,如果比较功能非常昂贵。
答案 7 :(得分:0)
除非您的要求非常具体,否则我不会自己编写。使用属于标准库的那些,它们经过了很好的测试,并且在边界条件方面不太可能让你失望。
那就是说,如果你有一个数组并且你需要每次按特定顺序排序的内容(而不是能够通过各种任意标准来求助)我会认为你使用的是错误的容器并且可能想要查看一个自动对插入元素进行排序的元素,例如std::set
或std::multiset
。
答案 8 :(得分:0)
排序算法基本上取决于程序员的要求。在这种情况下,数组(待排序)的大小非常重要。例如,您可以查看链接并了解各种排序算法的效率
http://www.durangobill.com/SortAlgorithms/Sort_Algorithms.html
答案 9 :(得分:-1)
是的,Quicksort是最好的,但是如果你有一个新的好算法并且它对你当前的情况有好处,那就写下你自己的。