想象一下两个元素的比较非常昂贵的情况。
你会使用哪种排序算法?
哪种排序算法在平均情况下使用最少的比较?
如果您可以预期很多被比较的元素是相同的,比如说在 80% 的比较中,该怎么办。这有什么不同吗?
Merge-insertion sort是插入排序的一种变体,被吹捧为几十年来已知比较最少的排序算法,并且可能仍然是用于最小比较的最佳自由记录排序算法:
合并插入排序是在n ≤ 15 或 20 ≤ n ≤ 22 时对n 个项目进行最小可能比较的排序算法,并且对于n ≤ 46 ,它具有最少的已知比较。
据报道, Glenn K. Manacher 的算法“以及后来的破纪录排序算法”(不幸的是,目前似乎都没有免费记录)适应合并插入排序算法以提供更少的比较。
获胜者是Sleep Sort,它不使用任何比较。
这取决于你有什么数据。您是否需要稳定的算法?
在您的数据统一的地方,您可以使用桶排序(Θ(n),O(n ^ 2))
计数排序(我认为这就是你要找的),它也是稳定的算法,但需要更多的内存(更少的是你有很多相同的记录)。
当然你可以使用睡眠排序,但是如果你有很多数据,它就不起作用了。
如果您的元素 80% 相同,也许有一种简单的方法可以说它们是相同的(完全相同)?
也许像基数排序这样的非比较算法可能是答案,因为它在一般情况下也很快(需要时间 O(n))。也不会在元素之间进行比较,但另一方面它需要大量内存
分布排序(使用散列数组)几乎不需要比较。
m = max number may appear in the input + 1
hash = array of size m
initialize hash by zeroes
for i = 0 to n - 1
hash[input[i]] = hash[input[i]] + 1
j = 0
for i = 0 to m - 1
while hash[i] > 0
sorted[j] = i
j = j + 1
hash[i] = hash[i] - 1