代码编织梦想

计数算法(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)。

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_51705589/article/details/129631306

python排序算法之计数排序_爱喝水的qdy的博客-爱代码爱编程_python 计数排序

目录 简介代码示例 简介 已知列表的元素范围在0到100,设计一个复杂度为O(n)的算法 在类似这种情况下,计数排序比sorted还要快 代码示例 #!/usr/bin/python3 # -*- c

python_分水岭算法-爱代码爱编程

def img_huizhi_lunkuo_tongji(): """ 识别小物体数量 :return: """ def watershed_algorithm(image): src = image.copy() blur = cv2.pyrMeanShiftFiltering(im

Python实现基础算法-爱代码爱编程

Python实现基础算法排序 基础算法排序1.冒泡排序2.选择排序3.插入排序4.归并排序5.快速排序6.计数排序7.堆排序 基础算法排序 1.冒泡排序 (1)原理:比较相邻两个数字的大小,将两数中比较大的那个数交换到靠后的位置,不断地交换下去就可以将最大的那个数放到队列的尾部。然后重头再次交换,直到数列排成有序数列。 代码实例: 第一步

python——哈希算法_桂?的博客-爱代码爱编程

import cv2 import numpy as np # 均值哈希算法 def aHash(img): # 缩放为8*8 img = cv2.resize(img, (8, 8)) # 转换为灰度图 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # s为像素和初值

排序算法:计数排序(python)_娱乐不打烊丶的博客-爱代码爱编程

思路:计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。 一图解百惑,上图!  话不多说,上代码! def counting_sort(input_list): l = input_list # 简化参数名 if not

寒假所学算法复习3月12总结-爱代码爱编程

3月12复习了深度优先搜索(dfs)和广度优先搜索(bfs) 刷了洛谷上的一道题:[POI2007]GRZ-Ridges and Valleys - 洛谷 原本想用dfs写,但写到一半,发现思路不对,于是又用bfs去写,思路如下: 地图上有三种区域,山峰,山谷,山坡,当一个相同数的区域的周围全是比这个数要小的数这个区域就是山峰,否则就是山谷,但

用javascript分类刷leetcode6.深度优先&广度优先(图文视频讲解)_javascript leetcode 6题-爱代码爱编程

深度优先&广度优先 动画过大,点击查看 bfs:适用于层序遍历或者寻找最短路径的问。 //bfs伪代码模版 function bfs(graph, start, end) { queue =

一本通 2.9.2 动态规划中背包问题_一本通 背包问题-爱代码爱编程

1260:【例9.4】拦截导弹(Noip1999) 【题目描述】 一个旅行者有一个最多能装 M 公斤的背包,现在有 n�件物品,它们的重量分别是W1,W2,...,Wn,它们的价值分别为C1,C2,...,Cn,求旅行者能获得最大总价值。 【题目分析】  【代码实现】 #include <bits/stdc++.h> usi