十大排序算法之->计数排序

一、计数排序简介

计数排序是一种非比较排序算法,适用于整数数组,时间复杂度为O(n+k),其中n为待排序数组的长度,k为待排序数组中最大值与最小值之差。

计算排序的原理是通过计算每个元素的出现次数或位置,而不是通过比较元素之间的大小来进行排序

注意!!!计数排序只适用于整数排序,当数据范围过大时,需要消耗大量的内存空间。

二、Python代码实现


# -*- coding: utf-8 -*-
"""
======================================
   File Name  : counting_sort.py
   Author     : lanmingyong(小黑测试员)
   date       : 2024/6/20 19:44
   Description: 计数排序是一种非比较排序算法,适用于整数数组,时间复杂度为O(n)。
                计算排序的原理是通过计算每个元素的出现次数或位置,而不是通过比较元素之间的大小来进行排序
                注意!!!计数排序只适用于整数排序,当数据范围过大时,需要消耗大量的内存空间。
======================================= 
"""


def counting_sort(arr):
    min_num = min(arr)
    max_num = max(arr)
    keys = [str(x) for x in range(min_num, max_num + 1)]
    values = [0] * len(keys)
    my_dict = dict(zip(keys, values))
    new_list = []
    # 计数数值出现的次数
    for i in arr:
        my_dict[str(i)] = my_dict[str(i)] + 1
    for key, value in my_dict.items():
        if value == 0:
            continue
        new_list = new_list + [int(key)] * value

    return new_list


#验证
# arr = [9, 6, 7, 2, 8, 1, 0, 4, 3, 0]
arr = [89, 65, 21, 8, 76, 79, 0, 86, 51, 33, 34, 8, 76, 53, 93, 88, 65, 0, 92, 56, 76, 9, 0, 54, 9, 37, 94, 72, 92, 72, 88, 44, 34, 48, 14, 22, 76, 34, 45, 50, 66, 4, 77, 41, 64, 24, 65, 99, 16, 64]

if __name__ == '__main__':
    print(counting_sort(arr))

#执行输出
"""
[0, 0, 0, 4, 8, 8, 9, 9, 14, 16, 21, 22, 24, 33, 34, 34, 34, 37, 41, 44, 45, 48, 50, 51, 53, 54, 56, 64, 64, 65, 65, 65, 66, 72, 72, 76, 76, 76, 76, 77, 79, 86, 88, 88, 89, 92, 92, 93, 94, 99]
"""

:如果代码有错误欢迎指出交流,感谢!!

三、动画演示

欢迎大家关注我的订阅号,会不定期分享一些相关的文章,有问题也欢迎一起讨论交流学习!
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/738920.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

上榜 Gartner丨中国领先数据基础设施代表厂商 DolphinDB

近日,Gartner 发布了 Innovation Insight: Data Infrastructure Evolves as the Foundation of D&A Ecosystem in China 这一深度研究报告,分析了当前企业使用数据基础设施的现状以及未来发展趋势。DolphinDB 凭借协同生态建设、云边一体架构和 AI 应…

C++的智能指针 RAII

目录 产生原因 RAII思想 C11的智能指针 智能指针的拷贝与赋值 shared_ptr的拷贝构造 shared_ptr的赋值重置 shared_ptr的其它成员函数 weak_ptr 定制删除器 简单实现 产生原因 产生原因:抛异常等原因导致的内存泄漏 int div() {int a, b;cin >> a…

@ControllerAdvice:你可以没用过,但是不能不了解

1.概述 最近在梳理Spring MVC相关扩展点时发现了ControllerAdvice这个注解,用于定义全局的异常处理、数据绑定、数据预处理等功能。通过使用 ControllerAdvice,可以将一些与控制器相关的通用逻辑提取到单独的类中进行集中管理,从而减少代码重…

前端开发接单公司做到哪些点,客户才愿意把项目包给你。

作为前端外包接单公司,你知道客户选择和你合作都看中哪些因素吗?单纯是价格吗?未必,本位给大家列举7个要素,并对每个要素做了定位,大家查缺补漏吧。 作为前端外包接单公司,要吸引同行客户将前端…

优秀的“抗霾”神器:气膜体育馆—轻空间

随着空气污染问题日益严重,尤其是雾霾天气频发,体育运动的场地环境质量受到越来越多的关注。气膜体育馆作为一种新型的体育场馆解决方案,以其独特的设计和多重优势,成为了优秀的“抗霾”神器。轻空间将深入探讨气膜体育馆的特点和…

pycharm不能安装包的解决方法

一直使用VScode写python,最近使用pycharm,但是pycharm不能安装包,类似这种 后面直接使用ALT F12跳转终端: pip install 需要添加的包 -i https://pypi.tuna.tsinghua.edu.cn/simple不报错了

Gitee 的公钥删不掉

公钥管理里已经没有公钥了, 仓库里还有,这是怎么回事? 这两个好像又没什么关系。 那为啥要搞两处呢? 个人信息里的公钥一直就没有仓库里使用的公钥, 删掉个人信息里的也没什么影响。 在仓库管理页面导入新公钥提示已…

【shell脚本速成】mysql备份脚本

文章目录 案例需求脚本应用场景:解决问题脚本思路实现代码 🌈你好呀!我是 山顶风景独好 🎈欢迎踏入我的博客世界,能与您在此邂逅,真是缘分使然!😊 🌸愿您在此停留的每一刻…

大数据集群数据传输

简单的服务器间的通信示例 netcat,简写为 nc,是 unix 系统下一个强大的命令行网络通信工具,用于在两台主机之间建立 TCP 或者 UDP 连接,并提供丰富的命令进行数据通信。nc 在网络参考模型属于应用层。使用 nc 可以做很多事情&…

探索Elastic Search:强大的开源搜索引擎,详解及使用

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 引入 全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索引…

如何使用手机号查快递?2个方法,包裹信息全掌握

无论是网购、亲友间寄送礼物还是工作中的文件传递,快递都扮演着至关重要的角色。然而,有时候我们可能会忘记自己的快递单号,或者在收到快递时没有留意保存相关信息。 这时候,如果能通过手机号查询快递,无疑会大大方便…

【LLM之KG】CoK论文阅读笔记

研究背景 大规模语言模型(LLMs)在许多自然语言处理(NLP)任务中取得了显著进展,特别是在零样本/少样本学习(In-Context Learning, ICL)方面。ICL不需要更新模型参数,只需利用几个标注…

Spire.PDF for .NET【文档操作】演示:设置 PDF 文档的 XMP 元数据

XMP 是一种文件标签技术,可让您在内容创建过程中将元数据嵌入文件本身。借助支持 XMP 的应用程序,您的工作组可以以团队以及软件应用程序、硬件设备甚至文件格式易于理解的格式捕获有关项目的有意义的信息(例如标题和说明、可搜索的关键字以及…

无源编缆测尺助力料场实现自动化堆取料作业

随着工业4.0时代的到来,智能化、无人化成为现代工业发展的重要趋势。在港口码头、钢铁冶金、焦化等高耗能行业中,如何实现物料的精准测量与无人化操作,成为企业提高生产效率、降低人工成本的关键。武汉市微深节能科技有限公司凭借其先进的分段…

如何配置taro

文章目录 step1. 全局安装wepacksetp2. 使用npm安装tarostep3. 项目初始化可能出现的问题 使用taro时需要在本地配置好nodejs环境,关于如何配置nodejs可参考我的这篇博文 如何配置nodejs环境 step1. 全局安装wepack 使用指令npm install webpack -g即可 安装完成…

电脑不小心删除的文件怎么恢复?4个必备恢复方法!

“刚刚在对电脑里的某些垃圾文件进行清理时,我一不小心误删了比较重要的数据。这些误删的数据还有机会恢复吗?希望大家帮帮我,非常感谢!” 在这个数字化飞速发展的时代,电脑早已成为我们日常生活和工作中不可或缺的一部…

【arm扩容】docker load -i tar包 空间不足

背景: 首先我在/home/nvidia/work下导入了一些镜像源码tar包。然后逐个load进去。当我 load -i dev-aarch64-18.04-20210423_2000.tar包的时候,出现 Error processing tar file(exit status 1): write /9818cf5a7cbd5a828600d9a4d4e62185a7067e2a6f2ee…

如何解决app广告填充率低、广告填充异常,提升广告变现收益?

APP广告变现有助于开发者获得持续的收益来源,由于广告链路的封闭性和复杂化,一旦出现请求配置参数错误、返回广告源信息缺失、素材被拦截等异常,大部分开发者很难及时查清异常情况,导致广告填充率不理想,甚至填充率常常…

KUBIKOS - Cube Monsters

KUBIKOS - Cube Monsters 是一系列 18 个不同的可爱低多边形移动友好怪物角色!每个角色都有自己的动画集。(移动、空闲、攻击、击中、跳跃等)。 +URP支持+18种不同的动物! + 低多边形(400~900个三角形) + 操纵和动画! + 4096x4096 纹理图集 + Mecanim 准备就绪! + 移动…

【第十三课】区域经济可视化表达——符号表达与标注

一、前言 地图最直接的表达就是使用符号表达。使用符号可以把简单的点线面要 素渲染成最直观的地理符号,提高地图的可读性。只要掌握了 ArcGIS 符号制 作的技巧,分析符号并总结出规则,就可以制作符合要求的地图符号。 (一&#…