首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这种计数排序实现的时间复杂度

这种计数排序实现的时间复杂度
EN

Stack Overflow用户
提问于 2019-04-26 01:55:22
回答 1查看 120关注 0票数 0

我必须确定给定计数排序代码的时间复杂度。我知道计数排序应该是O(n+k),但是我就是看不出这个函数是O(n+k)的,因为在第二个for循环中有一个for循环。

代码语言:javascript
复制
def counting_sort(array, k): # k is max(array)

    count = (k+1) * [0]  
    sorted = []
    for i in array:
        count[i] += 1
    for i in range(len(count)):
        if count[i] != 0:
            sorted += [i for j in range(count[i])]
    return sorted

如果元素是唯一的,最坏的情况不是n+k^2吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-26 02:21:03

第一个循环

代码语言:javascript
复制
for i in array:
    count[i] += 1

进行n次迭代,对于第二个循环,表示在列表理解的最坏情况下执行的指令的数量:

代码语言:javascript
复制
i for j in range(count[i]) #

count[i],并且所有count[i]的总和等于n。

代码语言:javascript
复制
        if count[i] != 0:

被执行k次,在最坏的情况下,

代码语言:javascript
复制
sorted +=...

也做了k次。把所有这些加起来,你就得到了O(n+k)

(假设sorted的+=是恒定成本,否则我们必须说+=是摊销常量,因此结果伴随着该警告)。

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

https://stackoverflow.com/questions/55855106

复制
相关文章

相似问题

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