Python计数算法

计数算法(Counting Sort)是一种线性时间复杂度的排序算法,适用于数据范围小但值分布比较集中的场景。

算法思想:

统计待排序数组中每个元素出现的次数;
将统计结果累加,得到每个元素在排序数组中的位置;
遍历待排序数组,将元素放置到相应的位置上;
将排序结果输出。

def counting_sort(arr):
    # 找到数组中最大值和最小值
    min_val, max_val = min(arr), max(arr)
    # 统计每个元素出现的次数
    count = [0] * (max_val - min_val + 1)
    for num in arr:
        count[num - min_val] += 1
    # 计算每个元素在排序数组中的位置
    for i in range(1, len(count)):
        count[i] += count[i-1]
    # 构建排序数组
    res = [0] * len(arr)
    for num in arr:
        res[count[num - min_val] - 1] = num
        count[num - min_val] -= 1
    return res

算法分析:

时间复杂度:计数算法的时间复杂度为O(n+k),其中n为待排序数组的长度,k为待排序数组中元素的取值范围;

空间复杂度:计数算法的空间复杂度为O(k)。

需要注意的是,计数算法要求待排序数组中的元素都是非负整数,如果出现负数或者小数,需要对算法进行相应的修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值