排序n个数字:确切需要多少个查询?

时间:2014-04-19 03:16:27

标签: sorting combinatorics

假设我有n个整数。对于每个查询,我可以选择两个并进行比较。准确地说,我需要多少个查询才能将它们从最小到最大排序?

当然,答案将是O(n log n)的顺序。但我想要一个确切的答案。

a(n)成为所需的数字查询。然后很明显a(n) >= log_2(n!)(或者更确切地说,是大于那个的最小整数)。是否发生了平等? n<=5似乎也是如此,但我不太确定。

编辑:我想出的一种排序算法如下:很明显,如果您知道a_1, ..., a_i的顺序,并且想了解a_{i+1}适合的位置,则需要log_2(i+1)次查询。然后,您可以先对a_1, a_2进行排序,然后添加a_3(将log_2(3)次查询),然后添加a_4(将log_2(4)次查询),. ..,然后添加a_n(将log_2(n)次查询)。总共需要<= log_2(n!)+n次查询。顺便说一下,有没有人知道这种排序算法的名称?

1 个答案:

答案 0 :(得分:0)

基于比较的排序的下界有一个完善的理论结果,它是Omega(n lg n)。使用决策树证明是非常简单的。这里有一些解释的链接,虽然你可以通过简单搜索“排序的下限”在谷歌上找到更多的理论工作:

http://en.wikipedia.org/wiki/Comparison_sort#Lower_bound_for_the_average_number_of_comparisons