当前位置: 首页 > news >正文

非比较排序之计数排序

目录

一、什么是计数排序

二、思路

三、代码实现


一、什么是计数排序

计数排序是一种非比较型的排序算法,它通过统计待排序数据中每个元素出现的次数,然后根据这个次数来进行排序。计数排序的具体步骤如下:

  1. 首先找出待排序数据中的最大值和最小值。
  2. 创建一个新的数组,长度为最大值和最小值之间的范围,并初始化为0。
  3. 遍历待排序数组,统计每个元素出现的次数,存储到新数组对应位置。
  4. 根据新数组中统计的次数,将数据重新排列得到排序后的数组。

计数排序适用于数据范围相对较小且数据比较集中的情况,它的时间复杂度为O(n+k),其中n为数据数量,k为数据范围。计数排序是稳定的排序算法,它不是基于比较的排序方法,因此在某些情况下可以比快速排序和归并排序等比较排序算法更快。但是计数排序需要额外的空间用于存储计数,所以在数据范围非常大的情况下可能会占用大量内存。

二、思路

将一组数据相对映射到一个数组中,通过数组建立索引来排序。不需要像基数排序一样存储原数据,只需要得到相对映射值加上最小值即为当前值。

具体步骤:

  1. 找到最大最小值,计算需要开辟的索引数组空间的大小
  2. 建立索引:每一个值减去基准值得到了索引数组的下标
  3. 排序:遍历索引数组,其中不为0的元素即为排好的数据。复原只需要加上基准值即可

三、代码实现

void CountSort(int* a,int n)
{//遍历找最大最小值int max = a[0];int min = a[0];for (int i = 0; i < n; i++){if (a[i] > max){max = a[i];}if (a[i] < min){min = a[i];}}//开辟基准数组int size = max - min + 1;int* tmp = (int*)malloc(sizeof(int) * size);if (tmp == NULL){perror(malloc);exit(1);}memset(tmp, 0, sizeof(int) * size);//建立索引for (int j = 0; j < n; j++){tmp[a[j] - min]++;}//排序int q = 0;for (int m = 0; m < size; m++){while (tmp[m]--){a[q++] = m + min;}}
}

相关文章:

非比较排序之计数排序

目录 一、什么是计数排序 二、思路 三、代码实现 一、什么是计数排序 计数排序是一种非比较型的排序算法&#xff0c;它通过统计待排序数据中每个元素出现的次数&#xff0c;然后根据这个次数来进行排序。计数排序的具体步骤如下&#xff1a; 首先找出待排序数据中的最大值…...

Django路由与会话深度探索:静态、动态路由分发,以及Cookie与Session的奥秘

系列文章目录 Django入门全攻略&#xff1a;从零搭建你的第一个Web项目Django ORM入门指南&#xff1a;从概念到实践&#xff0c;掌握模型创建、迁移与视图操作Django ORM实战&#xff1a;模型字段与元选项配置&#xff0c;以及链式过滤与QF查询详解Django ORM深度游&#xff…...

第7章 用户输入和 while 循环

第7章 用户输入和 while 循环 7.1 函数 input()的工作原理7.1.1 编写清晰的程序7.1.2 使用 int()来获取数值输入7.1.3 求模运算符 7.2 while 循环简介7.2.1 使用 while 循环7.2.2 让用户选择何时退出7.2.3 使用标志7.2.4 使用 break 退出循环7.2.5 在循环中使用 continue7.2.6 …...

xshell远程无法链接上VM的centos7

1、现象如下&#xff0c; 2.1解决办法&#xff1a;查证后发现这个默认的设置为vmnet0 2.2解决办法&#xff1a;重启win10的虚拟机网卡&#xff08;先禁用再启用&#xff09; 3.参考文章&#xff1a;Xshell连接不上虚拟机centos7_centos7的nat模式可以ping通网络,但是用xshell连…...

拥抱AI-图片学习中的卷积神经算法详解

一、定义 卷积神经算法&#xff08;Convolutional Neural Networks, CNN&#xff09;是深度学习领域中的一种重要算法&#xff0c;特别适用于处理图像相关的任务。以下是卷积神经算法的详细解释&#xff1a; 1. 基本概念 定义&#xff1a;卷积神经网络是一类包含卷积计算且具…...

超详解——深入详解Python基础语法——基础篇

目录 1 .语句和变量 变量赋值示例&#xff1a; 打印变量的值&#xff1a; 2. 语句折行 反斜杠折行示例&#xff1a; 使用括号自动折行&#xff1a; 3. 缩进规范 缩进示例&#xff1a; 4. 多重赋值&#xff08;链式赋值&#xff09; 多重赋值的应用&#xff1a; 5 .多…...

系统架构设计师【论文-2017年 试题2】: 论软件架构风格(包括写作要点和经典范文)

题目&#xff1a;论软件架构风格 &#xff08;2017年 试题2&#xff09; 软件体系结构风格是描述某一特定应用领域中系统组织方式的惯用模式。体系结构风格 定义一个系统家族&#xff0c;即一个体系结构定义一个词汇表和一组约束。词汇表中包含一些构件和 连接件类型&#xff…...

Spring Boot 事务传播机制详解

Spring Boot 事务传播机制详解 1. 事务传播机制概述 Spring Boot 中的事务传播机制用于处理多个事务方法之间相互调用时的事务行为&#xff0c;保证数据的完整性和一致性。当务传播机制定义了在调用一个事务方法时&#xff0c;当前事务该如何传播或传递。Spring Boot 中的事务…...

【机器学习】生成对抗网络 (Generative Adversarial Networks | GAN)

生成对抗网络 (Generative Adversarial Networks | GAN) 介绍 生成对抗网络 (Generative Adversarial Networks&#xff0c;简称GAN) 是一种强大的深度学习模型&#xff0c;用于生成具有逼真感的图像、音频和文本等内容。GAN 的核心理念是通过训练两个神经网络&#xff0c;生…...

[ADS信号完整性分析]深入理解IBIS AMI模型设计:从基础到实践

在高速数字设计领域&#xff0c;信号完整性&#xff08;SI&#xff09;分析对于确保系统性能至关重要。IBIS AMI&#xff08;Algorithmic Model Interface&#xff09;模型作为一种强大的工具&#xff0c;能够帮助设计师在系统层面上评估和优化SERDES&#xff08;串行器/解串器…...

Plotly : 超好用的Python可视化工具

文章目录 安装&#xff1a;开始你的 Plotly 之旅基本折线图&#xff1a;简单却强大的起点带颜色的散点图&#xff1a;数据的多彩世界三维曲面图&#xff1a;探索数据的深度气泡图&#xff1a;让世界看到你的数据小提琴图&#xff1a;数据分布的优雅展现旭日图&#xff1a;分层数…...

Linux电话本的编写-shell脚本编写

该电话本可以实现以下功能 1.添加用户 2.查询用户 3.删除用户 4.展示用户 5.退出 代码展示&#xff1a; #!/bin/bash PHONEBOOKphonebook.txt function add_contact() { echo "Adding new contact..." read -p "Enter name: " name …...

蓝牙开发 基础知识

零、基础知识 0.1、Android 应用可通过 Bluetooth API 执行以下操作 扫描其他蓝牙设备查询本地蓝牙适配器的配对蓝牙设备建立 RFCOMM 通道通过服务发现连接到其他设备与其他设备进行双向数据传输管理多个连接 0.2、蓝牙进行通信的四大必需任务 设置蓝牙查找局部区域内的配对…...

QNX 7.0.0开发总结

1 QNX编译 1.1 基本概念 QNX可以直接使用Linux Makefile编译库和二进制&#xff0c;在Makefile文件中指定CCaarch64-unknown-nto-qnx7.0.0-g&#xff0c;或者CCx86_64-pc-nto-qnx7.0.0-g&#xff0c;保存退出后&#xff0c;运行source /qnx_sdk_path/qnxsdp-env.sh&#xff0c;…...

Golang使用讯飞星火AI接口

一、API申请 https://www.bilibili.com/video/BV1Yw411m7Rs/?spm_id_from333.337.search-card.all.click&vd_source707ec8983cc32e6e065d5496a7f79ee6 注册申请&#xff0c;需要在此页面获取appid、apisecret、apikey https://www.xfyun.cn/ https://console.xfyun.cn/ser…...

矫正儿童发音好帮手

《言语构音语音训练手册——下颌、唇部、舌部构音运动障碍》教辅书 儿童言语构音语音问题越来越受到家长的关注&#xff0c;大多数家长受到儿童说话晚、口齿不清、发音错误等问题的困扰&#xff0c;国外报道2岁儿童言语构音语音障碍达到17%&#xff0c;3岁达4%~7.5%&#xff0…...

wordpress主题导航主题v4.16.2哈哈版

1.下载授权接口源码onenav-auth-api-v2.zip &#xff0c;在宝塔新建一个网站&#xff0c;域名为 auth.iotheme.cn&#xff0c;设置wordpress伪静态&#xff0c;申请ssl证书。将上面源码解压后上传到此网站根目录。 2. 在宝塔根目录etc下 hosts 中添加 127.0.0.1 auth.iotheme.…...

内存分布图

1.基本数据类型和常量存放在常量池中。 2.类的成员存放在堆中&#xff0c;如果成员是其他类对象也存放在堆中 3.数组和数组的内容放在堆中 4.类对象存放在栈中。 5.单独的对象存放在栈中。 6.引用数据类型存放在堆或栈中。 Java中对象到底存在堆中还是栈中_java对象在堆还…...

如何发布自己的NPM插件包?

安装 Node.js &#xff1a; 如果没有安装的&#xff0c;Nodejs下载安装&#xff1a;http://nodejs.cn/download/ 首先确保你已经安装了 Node.js 和 npm。你可以通过运行以下命令来检查是否已经安装&#xff1a; node -v npm -v初始化项目&#xff1a; 创建一个新的项目文件夹…...

计算广告读书杂记-待整理

不知不觉已经在字节干了两年多广告研发&#xff0c;也跳槽去了一家广告公司继续深耕&#xff0c;借着这个劲&#xff0c;重新读一遍《计算广告》这本书&#xff0c;并将一些重点概念进行记录。...

No module named _sqlite3解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...

防飞单,赢市场:售楼处客流统计管理新篇章

在竞争激烈的房地产市场中&#xff0c;售楼处作为楼盘销售的重要窗口&#xff0c;其管理效率和服务质量直接关系到楼盘的销售业绩和品牌形象。然而&#xff0c;传统的客户人数统计方式往往存在诸多不足&#xff0c;如数据不准确、统计效率低下等&#xff0c;这些问题给售楼处的…...

LeetCode:419. 甲板上的战舰(遍历 Java)

目录 419. 甲板上的战舰 题目描述&#xff1a; 实现代码与解析&#xff1a; 遍历 原理思路&#xff1a; 419. 甲板上的战舰 题目描述&#xff1a; 给你一个大小为 m x n 的矩阵 board 表示甲板&#xff0c;其中&#xff0c;每个单元格可以是一艘战舰 X 或者是一个空位 . &…...

【python】OpenCV—Blob Detection(11)

学习来自OpenCV基础&#xff08;10&#xff09;使用OpenCV进行Blob检测 文章目录 1、cv2.SimpleBlobDetector_create 中文文档2、默认 parameters3、配置 parameters附录——cv2.drawKeypoints 1、cv2.SimpleBlobDetector_create 中文文档 cv2.SimpleBlobDetector_create 是 O…...

【C++】 基础复习 | 数据类型,输入,输出流 scanf printf

文章目录 1 基本数据类型1.1 基本数据类型1.2 构造类型1.3 指针类型&#xff08;Pointers&#xff09; 2 基础输入输出2.1 通过输入输出操作符>> <<2.2 通过scanf和printf输入和输出2.2.1 输出printf 函数2.2.2 输出scanf 函数2.2.3 注意事项 1 基本数据类型 了解…...

linux pxe和无人值守

一 PXE和无人值守 pxe c/s模式 允许客户端通过网络从远程服务器&#xff08;服务端&#xff09;下载引导镜像 加载安装文件 实现自动化安装操作系统 无人值守 就是安装选项不需要认为干预 可以自动化实现 pxe的优点 1 规模化 同时装配多台服务器 20多 30台 2 自动化 …...

Questflow借助MongoDB Atlas以AI重新定义未来工作方式

MongoDB客户案例导读 Questflow借助MongoDB Atlas赋能AI员工&#xff0c;助力中小型初创企业自动化工作流程&#xff0c;简化数据分析&#xff0c;提升客户体验&#xff0c;推动AI与员工的协作&#xff0c;重新定义未来工作方式。 协作式AI自动化平台 无需编码即可拥有自己的…...

数值计算精度问题(浮点型和双整型累加精度测试)

这篇博客介绍双整型和浮点数累加精度问题,运动控制轨迹规划公式有大量对时间轴的周期累加过程,如果我们采用浮点数进行累加,势必会影响计算精度。速度的不同 进一步影响位置积分运算。轨迹规划相关问题请参考下面系列文章,这里不再赘述: 1、博途PLC 1200/1500PLC S型速度曲…...

算法训练营day56

题目1&#xff1a;300. 最长递增子序列 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int lengthOfLIS(vector<int>& nums) {// dp数组含义是第i个数的严格递增子序列的长度// 内层的递推公式就是 取 0 到 i - 1之间最大的dp数组 然后 1vector…...

基于STM32的智能水产养殖系统(二)

TPS5433IDR TPS5433IDR 是一款由德州仪器 (Texas Instruments) 生产的高效降压转换器&#xff08;Buck Converter&#xff09;。它能够将较高的输入电压转换为较低的输出电压&#xff0c;适用于各种电源管理应用。 主要特性 输入电压范围: 5.5V 至 36V输出电压范围: 0.9V 至 …...

建站工具论坛/网站文章优化技巧

...

沈阳做网站公司有哪些/apple私人免费网站怎么下载

想让自己的手机坏得更快吗&#xff1f;以下几种手机配件完全做得到&#xff01;你都用过哪些呢&#xff1f;一起来看看吧&#xff01;一根没有3C认证的劣质手机数据线3块钱一根&#xff0c;买不了吃亏&#xff0c;买不了上当&#xff0c;但是3块钱一根的手机数据线使用后会变这…...

wordpress+翻页函数/电商网站搭建

神目智能迎宾系统是通过人脸识别&#xff0c;对访客进行欢迎/告警的智能系统&#xff0c;该系统分为两部分&#xff0c;前端部分可进行访客人脸检测、欢迎界面呈现、智能语音播报欢迎词&#xff1b;后台部分可接入神目弼马温管理平台&#xff0c;对数据进行多样化分类管理&…...

网站导航栏内容/外贸网站优化公司

工作环境(蓝色粗体字为特别注意内容)1&#xff0c;系统环境&#xff1a;Win7 Ultimate sp1 2&#xff0c;软件环境&#xff1a;Google浏览器 3&#xff0c;参考文献&#xff1a;https://www.v2ex.com/t/120451 今天在安装Web of Science的Google浏览器插件Kopernio的时候&…...

集宁做网站/佛山百度推广公司

为什么80%的码农都做不了架构师&#xff1f;>>> 引言 旧版的 Visual Studio 没有集成 git 工具,并且自己也习惯用 git-bash 命令行来操作, 那么如何在旧版的 Visual Studio 快速打开 git-bash 终端呢? 使用外部工具 Tips: 请确保你已经安装了git,并添加到 Windows…...

坂田网站建设方案/武汉百度开户代理

STM32启动过程--启动文件--分析 一、概述 1、说明 每一款芯片的启动文件都值得去研究&#xff0c;因为它可是你的程序跑的最初一段路&#xff0c;不可以不知道。通过了解启动文件&#xff0c;我们可以体会到处理器的架构、指令集、中断向量安排等内容&#xff0c;是非常值得玩…...