如果我们有一些 m > 0并且需要提供一种算法来排序0到 n ^ m 范围内的 n 整数-1在时间O(mn)。我的建议是:
Radix-Sort(A,t) // t is the digit length
for i=0 to t
do Insertion-Sort A on digit i
我的论点是上面的内容将在O(mn)中运行,因为对于每个数字t - 插入排序将花费O(n)时间,因为每次运行的范围很小。
这是正确的建议吗?上面的空间要求应该是什么?
感谢。
答案 0 :(得分:1)
在排序小范围的离散数时,最好使用Counting sort,因此它保证了搜索在数据大小及其范围方面的线性(插入排序是与{的比较排序{1}}最坏情况的复杂性,但是如果数据是按照相反方向排序的,那么小范围可能无法帮助您进行插入排序,因为每个元素都会被移动)。
使用计数排序时的空间复杂度为O(n^2)
,其中n是数组的大小,k是数据的范围。您可以使用相同的数组进行排序并返回结果,因为您正在对原始数据进行排序。
答案 1 :(得分:0)
空间要求为O(m + n),因为您需要原始数字和m个桶来放置n个项目。运行时间是O(mn),其可以是>> n这是基数排序的问题。在所有情况下它的O(mn)但问题是如果m>你得到的东西大于O(n ^ 2)。根据它的编写方式,在最坏的情况下,内存也可以是O(mn),因为你创建了n个数字集的m个副本以进行排序。