假设我有n
整数。对于每个查询,我可以选择两个并进行比较。准确地说,我需要多少个查询来将它们从最小到最大排序?排序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
查询。顺便说一句,有没有人知道这个排序算法的名称?
什么样的,你使用?作为一个例子,请看这个链接的幻灯片50:http://pkqs.net/~tre/talks/2013_icalp_quicksort.pdf,其中概述了各种快速排序算法所需的交换和比较的总数。我绝不是理论计算机科学方面的专家,但这些幻灯片集的作者是,他们似乎甚至不能提出确切的答案。也许我正在反思这一点。 –
我对平均数不感兴趣,我对最坏的情况感兴趣。看到上面的一个排序算法,它接近我描述的下限。 – Solaris
您的编辑似乎是插入排序,它使用二进制搜索来查找a_(i + 1)的正确位置。 –