给定具有n个元素[1,...,n]的数组的最大元素M,如何影响每个基于比较的排序算法的时间复杂度的下限Ω(nlogn)?我必须强调,给出了数组的最大元素M.
答案 0 :(得分:3)
它没有受到影响。
请注意,n!
可能存在排列,每个比较OP有两种可能的结果 - “左边更高”或“右边更高”。
对于任何基于比较的算法,每个“决定”都是根据一次比较的结果制定的。
因此,为了成功确定任何排列的正确顺序,您将需要(在最坏的情况下)log 2 (n!)比较。
然而,众所周知,log 2 (n!)在Theta(nlogn)中 - 无论范围如何,你都会回到Omega(nlogn)的下限。在手边。
请注意,其他不使用(仅)比较的方法可以更有效地对整数进行排序。
答案 1 :(得分:1)
如果M
实际上是数组元素绝对值的约束,并且元素是整数,则可以通过保持单独的数组{O(n + M)
来对数组进行排序。 1}}初始化为int occurrences[2M + 1];
,扫描原始数组并计算每个元素的出现次数,并使用0
编写输出数组。
如果元素是浮点数(正式的,实数),那么它们的大小就没有影响了。
如果元素是积分的并且可以是负的(形式上,任意大幅度的整数),那么在幅度上有一个上限没有效果。
修改在第一段中有occurrences
,应为O(n)
。