我很想知道如何根据输入选择排序算法,这样我才能获得最佳效率。
它应该是输入的大小还是输入的排列方式(Asc / Desc)或使用的数据结构等......?
答案 0 :(得分:4)
一般算法的重要性,以及排序算法的重要性如下:
(*)正确性 - 这是最重要的事情。如果你的算法超快速有效,那就没什么了不起的,但是错了。在排序中,即使你有两个候选人正确排序,但你需要一个stable sort - 你会选择稳定的排序算法,即使效率较低 - 因为它对你的目的是正确的,而另一个不是。
接下来基本上是在运行时间,所需空间和实施时间之间的权衡(如果你需要从头开始实现某些东西,而不是使用库,以获得轻微的性能提升 - 它可能不会'值得的)
在考虑上述权衡时需要考虑的一些事项:
O(n^2)
)。O(nlogn)
最坏情况的算法。答案 1 :(得分:3)
它应该基于所有这些事情。
您需要考虑数据的大小,因为对于小型数据集,插入排序可能比快速排序等更快
您需要知道数据的排列方式,因为每种算法的最差/平均/最佳情况渐近运行时间不同(有些最差/平均情况相同而另一些可能有最差的情况) case vs avg)
您显然需要知道所使用的数据结构,因为如果您的数据已经采用特殊格式,或者您可以有效地将其放入新的数据结构中,那么会有一些非常专业的排序算法你为你排序(一个BST或堆)
答案 2 :(得分:0)
决定您选择排序算法的两个主要因素是时间复杂度和空间复杂度。根据您的场景以及您可用的资源(时间和内存),您可能需要根据每种排序算法提供的内容在排序算法之间进行选择。
排序算法的实际性能也取决于输入数据,如果我们事先知道输入数据的某些特征,例如输入的大小,数组已经排序的方式,它会有所帮助。
例如,
如果您事先知道输入数据只有1000个非负整数,那么您可以使用counting sort
在线性时间内对这样的数组进行排序。
排序算法的选择取决于空间和时间的约束,以及输入数据的大小/特征。
答案 3 :(得分:0)
在非常高的水平上,您需要考虑插入比率与每种算法的比较。
对于文件中的整数,这不是非常重要,但如果你说你是根据内容对文件进行排序,你自然希望尽可能少地进行比较。