Python实现计数排序

news2024/11/18 18:24:39

对于如果存在使用两个数组成员进行比较的操作,该方法会导致排序算法的时间复杂度会存在一个下界问题,该问题在使用计数排序的时候可以突破这个理论下界,也即是不适用元素比对的操作的算法之一,计数排序。

添加图片注释,不超过 140 字(可选)

对于以上给定数组进行计数排序的基本流程,首先遍历一次数组,获得数组中元素的最大值,给定的数组的最大值为6,于是创建含有7个元素的新数组,其中每个元素的初始值是0。

添加图片注释,不超过 140 字(可选)

这个元素所对应的就是根据原数组最大值所创建的新数组,这个数组包含元素的个数正好等于要排序数组中的最大值,这个数组称为bufferArray,接着遍历原始数组的元素,然后取出对应的元素值。就把这个元素值当做下标,将bufferArray中对应的下表的元素值加1,这样操作后,bufferArray元素值变化如下:

添加图片注释,不超过 140 字(可选)

继续这样的操作之后,下一次遍历的元素值是0,把bufferArray下标为0的元素值加1,然后下一个遍历的元素是1,一直继续,得到最后的bufferArray的数组状态是:

添加图片注释,不超过 140 字(可选)

接下来就是将bufferArray中的元素前后相加,执行后的bufferArray元素是:

添加图片注释,不超过 140 字(可选)

使用python实现计数排序的代码如下:

def  counting_sort(A):
    k = 0
    for element in A:
        if isinstance(element int) is False or element < 0:  #计数排序要求每个元素必须是整数且大于0
            raise Exception(\element has to be integer and no minus\)
        if element > k:
            k = element
    buffer_array = []
    for i in range(0 k + 1): #根据最大值元素创建新数组,并初始化为0
        buffer_array.append(0)
    for element in A: #遍历数组每个元素在数组buffer_array中进行计数
        buffer_array[element] += 1
    for i in range(1 len(buffer_array)): #将buffer_array中的元素前后相加
        buffer_array[i] = buffer_array[i - 1] + buffer_array[i]  
    sorted_array = []
    for i in range(0 len(A)):  #构建与数组A元素个数相同的新数组
        sorted_array.append(0)
    A = A[::-1]
    for element in A:  #根据buffer_array中对元素的计数在新数组中排序
        position = buffer_array[element]
        sorted_array[position - 1] = element
        buffer_array[element] -= 1
    return sorted_array

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于数字图像处理考试

我们学校这门科目是半学期就完结哦&#xff0c;同学们学习的时候要注意时间哦。 选择题不用管&#xff0c;到时候会有各种版本的复习资料的。 以下这些东西可能会是大题的重点&#xff1a; 我根据平时代码总结的&#xff0c;供参考 基本操作&#xff1a; 1.读图&#xff1a;…

【数据结构与算法】【腾讯阿里链表面试题】算法题--链表易懂版讲解

&#x1f389;&#x1f389;欢迎光临&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;特别推荐给大家我的最新专栏《Spring 狂野之旅&#xff1a;底层原理高级进阶》 &#x1f680…

【正式】今年第一篇CSDN(纯技术教学)

一、文件上传简介 文件上传漏洞是指用户上传了一个可执行的脚本文件&#xff08;木马、病毒、恶意脚本、webshell等&#xff09;&#xff0c;并通过此脚本文件获得了执行服务器端命令的能力。上传点一般出现在头像、导入数据、上传压缩包等地方&#xff0c;由于程序对用户上传…

CSP-202009-1-称检测点查询

CSP-202009-1-称检测点查询 解题思路 本题的时间复杂度貌似没有限制&#xff0c;直接暴力枚举就能知识盲点&#xff1a;sort()函数-升序排序 #include <algorithm>给名为dis&#xff0c;长度为n的数组排序sort(new_dis, new_dis n); #include <iostream> #inc…

三、OpenAI所有模型介绍

1. 综述 OpenAI API开发了具有各种能力的模型。可以根据不同的需求选择不同的模型并进行精调。 模型描述GPT-4、GPT-4 Turbo一组从GPT-3.5升级后的模型&#xff0c;能够生成自然语言和代码GPT-3.5 Turbo一组从GPT-3.5升级后的模型&#xff0c;能够生成自然语言和代码DALL.E能…

搭建yum仓库服务器

安装 1.安装linux 1.1安装依赖 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel 1.2下载 cd /opt/nginx wget http://nginx.org/download/nginx-1.25.3.tar.gz 1.3解压 tar -xvf nginx-1.25.3.tar.gz 1.4配置 cd nginx-1.25.3 ./configure --pre…

python高校实验室管理系统的django设计与实现81txp

技术栈 后端&#xff1a;python 前端&#xff1a;vue.jselementui 框架&#xff1a;django Python版本&#xff1a;python3.7 数据库&#xff1a;mysql5.7 数据库工具&#xff1a;Navicat 开发软件&#xff1a;PyCharm .本高校实验室管理系统采用python语言、MySQL数据库&…

python 爬虫篇(3)---->Beautiful Soup 网页解析库的使用(包含实例代码)

Beautiful Soup 网页解析库的使用 文章目录 Beautiful Soup 网页解析库的使用前言一、安装Beautiful Soup 和 lxml二、Beautiful Soup基本使用方法标签选择器1 .string --获取文本内容2 .name --获取标签本身名称3 .attrs[] --通过属性拿属性的值标准选择器find_all( name , at…

ad18学习笔记十八:如何放置丝印层敷铜?

我画板的时候&#xff0c;需要把板卡顶面丝印层的一个矩形区域&#xff0c;画成白色&#xff0c;但是这个区域内有好几个焊盘&#xff0c;丝印涂色的地方需要避开这几个焊盘&#xff0c;我觉得不能简单的在丝印层画一个矩形完事&#xff0c;最好让丝印层的这个区域&#xff0c;…

会声会影绿幕抠图操作方法 会声会影绿幕抠图有绿色残边 绿幕抠图视频有绿边怎么处理 抖音怎么剪辑视频 视频剪辑软件推荐

科幻片里真的存在怪兽吗&#xff1f;外太空的画面是直接将演员放入太空拍摄的吗?其实这些不切实际的画面是通过绿幕拍摄实现的。你只需要在绿幕前拍一段太空漫步的视频&#xff0c;再利用会声会影的抠图功能就能实现&#xff01;如果你还不会绿幕抠图&#xff0c;我今天就手把…

【从Python基础到深度学习】6. IPython使用PyCharm代码调试与使用PEP

一、IPython交互式shell Python的解释器如今有多个语言的实现&#xff0c;包括: CPython ——官方版本的c语言实现 ython ——可以运行在Java平台 IronPython ——可以运行在.NET和Mono平台PyPy —— Python实现的&#xff0c;支持JIT即时编译 1.PyCharm中 2.Ubuntu终端中 s…

NSB_Login

1.访问界面 2.查看源码&#xff0c;发现提示爆破字典 3.下载字典 https://github.com/brannondorsey/naive-hashcat/releases/download/data/rockyou.txt4.burp进行爆破。&#xff08;字典有点大&#xff0c;直接裂开。&#xff09; 5.爆破成功&#xff0c;密码 scream &am…

C++入门篇(4)—— 类与对象(1)

目录 1.类的引入 2.类的定义 3.类的访问限定符 4.类的作用域 5. 类对象的存储方式 6. this指针 6.1 this指针的引入 6.2 this指针的特性 6.3有意思的面试题 1.类的引入 C语言struct 结构体中只能定义变量&#xff0c;而C中可以定义函数。 struct Date {void Init(int…

XSS-Lab

1.关于20关的payload合集。 <script>alert(1)</script> "><script>alert(1)</script> onclickalert(1) " onclick"alert(1) "><a href"javascript:alert(1)"> "><a HrEf"javascript:alert…

古典密码(5)

一、Porta密码--替换密码 1.介绍&#xff1a;Porta密码(Porta Cipher)是一个由意大利那不勒斯的医生Giovanni Battista della Porta发明的多表代换密码&#xff0c;Porta密码加密解密过程的是相同的。Vigenere 密码是具有 26 个字母的多字母密码&#xff0c;而 Porta 除了仅使…

Linux应用程序几种参数传递方式

大家好&#xff0c;今天给大家介绍Linux应用程序几种参数传递方式&#xff0c;文章末尾附有分享大家一个资料包&#xff0c;差不多150多G。里面学习内容、面经、项目都比较新也比较全&#xff01;可进群免费领取。 在Linux中&#xff0c;应用程序可以通过多种方式接收参数。以下…

JavaScript综合练习4

JavaScript 综合练习 4 1. 案例演示 2. 代码实现 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title&…

从源码学习访问控制符使用

从源码学习访问控制符使用 Java中的访问控制符 ​ 在Java中&#xff0c;有四个访问控制符&#xff1a;public、protected、default&#xff08;默认或缺省&#xff0c;不使用关键字&#xff09;和private。 ​ 它们的访问范围如下&#xff1a; public&#xff1a;公共访问权…

【数据分享】1901~2022中国1km逐月潜在蒸散发数据集

大家新年好啊&#xff01;今天给大伙儿分享的是1901~2022中国1km逐月潜在蒸散发数据集&#xff0c;收藏一下&#xff0c;过完年再看&#xff01;当然了&#xff0c;如果有问题的朋友&#xff0c;可以添加俺微信交流。 1 数据简介 数据集为中国逐月潜在蒸散发&#xff0c;空间分…

Redis核心技术与实战【学习笔记】 - 24.Redis 脑裂

简述 所谓脑裂&#xff0c;就是指在主从集群中&#xff0c;同时有两个主节点&#xff0c;它们都能接收写请求。而脑裂最直接的影响就是客户端不知道该往哪个主节点写入数据&#xff0c;结果就是不同的客户端会往不同的主机诶点上写入数据。而且&#xff0c;严重的话&#xff0…