数据结构自学Day15 -- 非比较排序--计数排序

一、计数排序(Counting Sort)

计数排序是一种非比较型的排序算法,它的核心思想是:

利用“元素的值”来确定它在结果数组中的位置,通过“统计每个数出现的次数”来完成排序。

二、如何实现计数排序(核心步骤)

1、设有一个待排序数组 arr,长度为 n,值的范围是 [min, max]。

2、找最大最小值,确定计数数组大小

3. 创建计数数组并统计频次

4. 恢复到原数组(非稳定排序)

思维导图

代码实现

void Count_Sort(int* arr,int size){assert(arr);int min = arr[0];int max = arr[0];for(int i = 1;i<size;i++){if(arr[i]<min){min = arr[i];}if(arr[i]>max){max = arr[i];}}int Range = max-min+1;int index = 0;int* Count_Arr = (int*)calloc(Range,sizeof(int));for(int i = 0;i<size;i++){Count_Arr[arr[i]-min]++;};for(int j = 0;j<Range;j++){while (Count_Arr[j]--){arr[index++] = min+j;}}return;
}

三、计数排序优缺点

项目

内容

✅ 优点

时间复杂度为 O(n + k),非常快(k 为值域大小)

✅ 非比较排序

不依赖比较操作(不像快排/归并)

✅ 适合大规模、密集整数排序

❌ 缺点

只能处理 整数或可映射为整数 的数据,且值域不能太大(否则空间开销太大)

❌ 不适合有负数但未做映射处理的情况

❌ 不是原地排序,需要额外空间

四、应用场景:

  • 排序范围已知、较小的数据(例如考试成绩、年龄、投票数等)

  • 多关键字排序中的一环(如基数排序的子排序)

五、所学习过的排序算法总结

稳定性的介绍:数组中相同值,排完序的相对顺序是否可以做到不变,如果不变就是稳定的,如果会变化就是不稳定的。

排序算法

时间复杂度(平均/最坏)

空间复杂度

稳定性

是否原地

适用场景简述

冒泡排序

O(n²) / O(n²)

O(1)

✅ 是

✅ 是

小数据、教学演示

选择排序

O(n²) / O(n²)

O(1)

❌ 否

✅ 是

小数据、对稳定性无要求

插入排序

O(n²) / O(n²)

O(1)

✅ 是

✅ 是

几乎有序或小数据量

希尔排序

介于 O(n) ~ O(n²)

O(1)

❌ 否

✅ 是

中等规模数组

归并排序

O(n log n) / O(n log n)

O(n)

✅ 是

❌ 否

大数据量、稳定性要求高

快速排序

O(n log n) / O(n²)

O(log n)

❌ 否

✅ 是

通用排序,性能优秀

堆排序

O(n log n) / O(n log n)

O(1)

❌ 否

✅ 是

内存有限,稳定性无要求

计数排序

O(n + k) / O(n + k)

O(k)

✅ 是

❌ 否

整数排序、值域小

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

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

相关文章

k8s的权限

来自博客&#xff1a;25-k8s集群中-RBAC用户角色资源权限_权限 资源 角色-CSDN博客 一.RBAC概述&#xff08;基于角色的访问控制&#xff09; 1.图解 用户&#xff1a; 1.user 2.serviceAccount 3.Group 用户角色 1.Role:局部资源角色 2.clusterRole:全局资源角色额 角色绑…

C++ - 仿 RabbitMQ 实现消息队列--服务端核心模块实现(三)

目录 队列数据管理 代码实现 测试代码 绑定信息(交换机-队列)管理 代码实现 测试代码 队列数据管理 当前队列数据的管理&#xff0c;本质上是队列描述信息的管理&#xff0c;描述当前服务器上有哪些队列。 定义队列描述数据类 队列名称是否持久化标志是否独占标志是否自…

51c自动驾驶~合集9

自己的原文哦~ https://blog.51cto.com/whaosoft/11627386 #端到端1 说起端到端&#xff0c;每个从业者可能都觉得会是下一代自动驾驶量产方案绕不开的点&#xff01;特斯拉率先吹响了方案更新的号角&#xff0c;无论是完全端到端&#xff0c;还是专注于planner的模…

时间长了忘记jupyter的环境是哪个了

有这些但是忘记是哪个了jupyter kernelspec list查看内核路径&#xff0c;这个内核是用来告诉jupyter 去哪找内核配置的到这个路径下打开json文件查看使用的python环境从而确定是哪个conda环境为jupyter使用的python环境jupyter的工作原理&#xff1a;在创建conda环境后会安装j…

PYTHON从入门到实践-15数据可视化

数据可视化是数据分析中不可或缺的一环&#xff0c;它能够将抽象的数据转化为直观的图形&#xff0c;帮助我们更好地理解数据特征和发现潜在规律。本文将介绍如何使用Python中的Matplotlib和Plotly库进行数据可视化&#xff0c;并通过掷骰子的概率模拟案例展示可视化的实际应用…

Spring IOC 容器 **默认注册 Bean** 的 8 条规则

Spring IOC 容器 默认注册 Bean 的 8 条规则 &#xff08;Spring Framework 6.x 源码级总结&#xff09;阅读提示&#xff1a;把下面 8 条规则背下来&#xff0c;再读 Spring 源码时&#xff0c;你会在任何一行代码里立刻知道「这个 BeanDefinition 是从哪儿来的」。1️⃣ 环境…

29.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务--用户配置服务

用户配置服务是孢子记账中最简单的部分。简单说&#xff0c;用户配置服务就是用户自定义的配置项存储服务&#xff0c;用于我们的APP根据用户的配置实现指定的功能。它提供了一个简单的接口&#xff0c;允许用户存储和检索他们的配置数据。就目前来说&#xff0c;用户配置只有一…

Python实现PDF按页分割:灵活拆分文档的技术指南

Python实现PDF按页分割&#xff1a;灵活拆分文档的技术指南 PDF文件处理是日常工作中的常见需求&#xff0c;特别是当我们需要将大型PDF文档拆分为多个部分时。本文将介绍如何使用Python创建一个灵活的PDF分割工具&#xff0c;能够根据用户指定的页数范围任意分割文档。 需求分…

「iOS」——GCD其他方法详解

GCD学习GCD其他方法dispatch_semaphore &#xff08;信号量&#xff09;**什么是信号量**dispatch_semaphore主要作用dispatch_semaphore主要作用异步转同步设置一个最大开辟的线程数加锁机制dispatch_time_t 两种形式GCD一次性代码(只执行一次)dispatch_barrier_async/sync栅栏…

【图像处理基石】如何实现一个车辆检测算法?

基于AI的车牌检测和识别算法 问题描述、应用场景与难点 问题描述 车牌检测和识别是计算机视觉领域的一个特定任务&#xff0c;主要包含两个核心步骤&#xff1a; 车牌检测&#xff1a;从图像中准确定位车牌的位置和区域车牌识别&#xff1a;对检测到的车牌区域进行字符识别&…

计算机学报 2025年 区块链论文 录用汇总 附pdf下载

计算机学报 Year&#xff1a;2025 2024请看 1 Title: 基于区块链的动态多云多副本数据完整性审计方法研究 Authors: Key words: 区块链&#xff1b;云存储&#xff1b;多云多副本存储&#xff1b;数据完整性审计 Abstract: 随着云计算技术的快速发展和云存储服务的日益…

计算机网络-UDP协议

UDP&#xff08;用户数据报协议&#xff09;是传输层的一种无连接、不可靠、轻量级的协议&#xff0c;适用于对实时性要求高、能容忍少量数据丢失的场景&#xff08;如视频流、DNS查询等&#xff09;。以下是UDP的详细解析&#xff1a;1. UDP的核心特点特性说明无连接通信前无需…

子域名收集和c段查询

子域名收集方法一、sitesite&#xff1a; 要查询的域名可以查到相关网站二、oneforall &#xff08;子域名查找工具&#xff09;下载后解压的文件夹在当前文件夹打开终端然后运行命令 python oneforall.py --target xxxxxxxx&#xff08;这里放你要查的网址&#xff09; run最…

计网-TCP拥塞控制

TCP的拥塞控制&#xff08;Congestion Control&#xff09;是核心机制之一&#xff0c;用于动态调整发送方的数据传输速率&#xff0c;避免网络因过载而出现性能急剧下降&#xff08;如丢包、延迟激增&#xff09;。其核心思想是探测网络可用带宽&#xff0c;并在拥塞发生时主动…

依赖倒置原则 Dependency Inversion Principle - DIP

基本知识 1.依赖倒置原则&#xff08;DIP&#xff09;是面向对象设计&#xff08;OOD&#xff09;中的五个基本原则之一&#xff0c;通常被称为 SOLID 原则中的 D 2.核心思想&#xff1a; 高层模块不应该依赖低层模块&#xff0c;两者都应该依赖抽象。 (High-level modules sho…

原生input添加删除图标类似vue里面移入显示删除[jquery]

<input type"text" id"servicer-search" class"form-control" autocomplete"off" />上面是刚开始的input <div class"servicer-search-box"><input type"text" id"servicer-search" cla…

整理分享 | Photoshop 2025 (v26.5) 安装记录

导语&#xff1a; 最近整理资源时&#xff0c;发现有朋友在找新版 Photoshop。正好手边有 Photoshop 2025年7月的版本&#xff08;v26.5&#xff09;&#xff0c;就记录下来分享给大家&#xff0c;供有需要的朋友参考。关于这个版本&#xff1a;这个 Photoshop v26.5 安装包&am…

【Redis】Redis 数据存储原理和结构

一、Redis 存储结构 1.1 KV结构 Redis 本质上是一个 Key-Value&#xff08;键值对&#xff0c;KV&#xff09;数据库&#xff0c;在它丰富多样的数据结构底层&#xff0c;都基于一种统一的键值对存储结构来进行数据的管理和操作 Redis 使用一个全局的哈希表来管理所有的键值对…

【RAG优化】深度剖析OCR错误,从根源修复RAG应用的识别问题

1. 引言:OCR——RAG系统中的关键问题 当我们将一个包含扫描页面的PDF或一张报告截图扔给RAG系统时,我们期望它能“读懂”里面的内容。这个“读懂”的第一步,就是OCR。然而,OCR过程并非100%准确,它受到图像质量、文字布局、字体、语言等多种因素的影响。 一个看似微不足道…

【第六节】方法与事件处理器

方法与事件处理器 方法处理器 可以用 v-on 指令监听 DOM 事件: <div id="example"> <button v-on:click="greet">Greet</button></div>绑定一个单击事件处理器到一个方法 greet 。下面在 Vue 实例中定义这个方法 var vm=new V…