首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基排序运行时间

基排序运行时间
EN

Stack Overflow用户
提问于 2011-11-05 02:16:07
回答 2查看 2.8K关注 0票数 0

如果我们有一些m>0,并且需要提供一种算法来排序O(mn)中在0到n^m-1范围内的n个整数。我的建议是:

代码语言:javascript
复制
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)时间,因为每次运行的范围都很小。

这是正确的建议吗?以上的空间要求是什么?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-05 02:19:35

空间要求是O(m + n),因为您需要原始数字和m桶来放置n项。运行时是O(mn),可以是>> n,这是基排序的问题。在所有情况下,它都是O(mn),但问题是,如果m>n,则得到大于O(n^2)的值。根据编写方式的不同,在最坏的情况下,内存也可以是O(mn),因为您创建了n个数字集的m个副本,以便对其排序。

票数 0
EN

Stack Overflow用户

发布于 2011-11-05 14:37:53

使用计数排序更好,当对一个小范围的离散数进行排序时,它保证了搜索的线性度与数据大小及其范围(插入排序是一种与O(n^2)最坏情况复杂性相比较的排序,但是如果数据是按oposite方向排序的,那么这个小范围可能无法帮助您进行插入排序,因为每个元素都会被移动)。

使用计数排序时的空间复杂度为O(n+k),其中n是数组的大小,k是数据的范围。您可以使用相同的数组对结果进行排序和返回,因为您正在对原始数据进行排序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8017714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档