【数据结构详解】——计数排序(动图详解)

news2025/1/8 12:29:49

目录

  • 🕒 1. 计数排序

🕒 1. 计数排序

💡 算法思想:计数排序又称为鸽巢原理,是对哈希直接定址法的变形应用,操作步骤:

  1. 统计相同元素出现次数
  2. 根据统计的结果将序列回收到原来的序列中

请添加图片描述

void CountSort(int* a, int n)
{
    assert(a);  

    // 创建计数数组,数组大小为原数组中最大值-最小值+1
    int max = a[0], min = a[0];
    int i = 0;
    for (i = 0; i < n; i++)
    {
        if (a[i] > max)  
        {
            max = a[i];
        }
        if (a[i] < min)  
        {
            min = a[i];
        }
    }
    
    int range = max - min + 1;

    // 统计次数
    int* count = (int*)malloc(sizeof(int) * range);
    
    assert(count);

    // 初始化计数数组为0
    memset(count, 0, sizeof(int) * range);

    // 统计每个值出现的次数
    for (i = 0; i < n; i++)
    {
        count[a[i] - min]++;
    }

    // 根据计数数组进行排序
    int j = 0;
    for (i = 0; i < range; i++)
    {
        while (count[i]--)
        {
            a[j++] = i + min;  // 将排序后的值放回原数组
        }
    }

    free(count);
    count = NULL;  
}

注意:计数排序在排负数时,可将负数的类型转化成 unsigned int

只适合整数,不适合浮点数、字符串等。 数组中元素有正有负的情况时不适用计数排序。

计数排序的特性总结:

  1. 计数排序在数据范围集中时,效率很高,但是适用范围及场景有限。
  2. 时间复杂度:O(N+range)
  3. 空间复杂度:O(range)
  4. 稳定性:稳定

❗ 转载请注明出处
作者:HinsCoder
博客链接:🔎 作者博客主页

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

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

相关文章

Windows11 WSL2 Ubuntu编译安装perf工具

在Windows 11上通过WSL2安装并编译perf工具&#xff08;Linux性能分析工具&#xff09;可以按以下步骤进行。perf工具通常与Linux内核一起发布&#xff0c;因此你需要确保你的内核版本和perf版本匹配。以下是安装和编译perf的步骤&#xff1a; 1. 更新并升级系统 首先&#x…

【算法】并查集的介绍与使用

1.并查集的概论 定义&#xff1a; 并查集是一种树型的数据结构&#xff0c;用于处理一些不相交集合的合并及查询问题&#xff08;即所谓的并、查&#xff09;。比如说&#xff0c;我们可以用并查集来判断一个森林中有几棵树、某个节点是否属于某棵树等。 主要构成&#xff1a; …

three.js的粒子和粒子系统基础知识扫盲,附案例图

绚烂的烟花、急促的雨滴、深邃的宇宙等等这些效果都可以通过three.js的粒子效果模拟出来&#xff0c;已达到以假乱真的程度了&#xff0c;本文来分享一下three.js的粒子系统&#xff0c;欢迎大家点赞评论收藏。 一、什么是粒子和粒子系统 粒子&#xff1a;可以简单理解为一个具…

JDBC1 Mysql驱动,连接数据库

JDBC 一、JDBC Java Database Connectivity&#xff1a;Java访问数据库的解决方案 JDBC定义了一套标准接口&#xff0c;即访问数据库的通用API&#xff0c; 不同的数据库厂商根据各自数据库的特点去实现这些接口。 JDBC希望用相同的方式访问不同的数据库&#xff0c;让具体的…

集成OpenFeign和Sentinel实现自定义服务降级Fallback及网关流量控制

文章目录 sentinel下载安装启动sentinel访问sentinelpmhub-gateway 整合 sentinel引入依赖YML配置文件Nacos持久化配置 启动pmhub-gateway, 查看sentinel控制台启动结果如图相关名词解释 OpenFeign和 Sentinel 集成实现自定义 fallback 服务降级 Sentinel 和 Gateway 集成实现网…

苹果在iOS 18.1中向第三方开发者开放iPhone的NFC芯片

苹果公司今天宣布&#xff0c;开发者很快就能首次在自己的应用程序中提供 NFC 交易功能&#xff0c;而目前这主要是Apple Pay独有的功能。从今年晚些时候的 iOS 18.1 开始&#xff0c;开发者将可以使用新的 API 提供独立于 Apple Pay 和 Apple Wallet 的应用内非接触式交易。 这…

多线程之并发锁

多线程之并发锁 Synchronized 特性&#xff1a; 可重入&#xff0c;持有该锁的线程可以再次获取锁不可中断&#xff1a;获取了Synchronized锁之后就必须要等其释放锁&#xff0c;响应不了中断灵活性不高&#xff1a;使用Synchronized锁只能是进入到代码块内执行完了才释放锁…

基于DPU云盘挂载的Spark优化解决方案

1. 方案背景和挑战 Apache Spark&#xff0c;作为当今大数据处理领域的佼佼者&#xff0c;凭借其高效的分布式计算能力、内存计算优化以及强大的生态系统支持&#xff0c;已牢固确立其在业界的标杆地位。Spark on Kubernetes&#xff08;简称K8s&#xff09;作为Spark与Kuber…

代码随想录训练营 Day30打卡 贪心算法 part04 452. 用最少数量的箭引爆气球 435. 无重叠区间 763. 划分字母区间

代码随想录训练营 Day30打卡 贪心算法 part04 一、 力扣452. 用最少数量的箭引爆气球 有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points &#xff0c;其中points[i] [xstart, xend] 表示水平直径在 xstart 和 xend之间的气球。你不知道气球…

YoloV8改进策略:Block改进|LeYOLO,一种用于目标检测的新型可扩展且高效的CNN架构|复现LeYolo,轻量级Yolo改进

摘要 在目标检测中&#xff0c;深度神经网络的计算效率至关重要&#xff0c;尤其是随着新型模型越来越注重速度而非有效计算量&#xff08;FLOP&#xff09;。这一发展趋势在某种程度上忽视了嵌入式和面向移动设备的AI目标检测应用。在本文中&#xff0c;我们基于FLOP关注于高…

热泵干燥应用举例

热泵在木材加工中的应用主要是热泵干燥&#xff0c;具有能耗低、干燥质量好等特点。热泵木材干燥装置的基本结构是封闭式干燥窑&#xff0c;其中热泵机组的结构有单热源型&#xff08;图18-4&#xff09;、双热源型&#xff08;图18-5&#xff09;和空气回热型&#xff08;图18…

深入理解Java中的ConcurrentHashMap:高效线程安全的并发容器

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

Java并发:内存屏障,Atomic类,CAS函数,伪共享

阅读本文之前可以看一看 Java 多线程基础&#xff1a; Java&#xff1a;多线程&#xff08;进程线程&#xff0c;线程状态&#xff0c;创建线程&#xff0c;线程操作&#xff09; Java&#xff1a;多线程&#xff08;同步死锁&#xff0c;锁&原子变量&#xff0c;线程通信&…

【学习笔记】A2X通信的协议(十)- 通过PC5的直接探测与避让(DDAA)

3GPP TS 24.577 V18.1.0的技术规范&#xff0c;主要定义了5G系统中A2X通信的协议方面&#xff0c;特别是在PC5接口和Uu接口上的A2X服务。以下是文件的核心内容分析&#xff1a; 8. 通过PC5的直接探测与避让&#xff08;DDAA&#xff09; 8.1 概述 本条款描述了UE之间以及UE上…

论文阅读:Efficient Core Maintenance in Large Bipartite Graphs | SIGMOD 2024

还记得我们昨天讨论的《Querying Historical Cohesive Subgraphs over Temporal Bipartite Graphs》这篇论文吗? https://blog.csdn.net/m0_62361730/article/details/141003301 这篇(还没看的快去看) 这篇论文主要研究如何在时间双向图上查询历史凝聚子图&#xff0c;而《E…

CAD二次开发IFoxCAD框架系列(18)-块表操作

1. 块表的查询 1.1 查找名为“自定义块”的块表中的图块记录 using var tr new DBTrans(); if (tr.BlockTable.Has("自定义块")) {//要执行的操作 }遍历块表并打印所有的块表的图块名称 public void Test_DBTrans_BlockCount() {using var tr new DBTrans();var…

CentOS7.9上通过KVM安装Centos虚拟机

目录 1 开发前准备&#xff08;先确保服务器可以虚拟化&#xff09;&#xff1a; 2、安装KWM环境 3、创建镜像文件存放目录 4、创建镜像文件存放目录 5、安装桥连接虚拟网络 6、安装虚拟机 7、配置操作系统 8、虚拟机配置网卡地址 9、克隆虚拟机执行 1开发前准备&am…

Git文件管理技巧:轻松删除与查看文件,忽略不必要的文件与文件夹!

避免文件混乱&#xff1a;Git 文件操作技巧 一、Git工作原理概述二、删除文件三、查看指定文件的修改四、指定不需要 Git 管理的文件五、总结 一、Git工作原理概述 Git是一种分布式版本控制系统&#xff0c;其核心在于其高效的快照机制、强大的分支与合并功能、本地开发的灵活…

数据集与数据库:有什么区别?

数据集和数据库是我们在处理数据时经常听到的两个常用词。虽然它们听起来很相似&#xff0c;但它们具有不同的特征并用于不同的用途。本文深入探讨数据集和数据库之间的主要区别&#xff0c;探索了它们的结构、数据类型和各种其他功能&#xff0c;以帮助您做出明智的决定&#…

回归预测|基于灰狼优化GWO-Transformer-BiLSTM组合模型的数据回归预测Matlab程序 多特征输入单输出

回归预测|基于灰狼优化GWO-Transformer-LSTM组合模型的数据回归预测Matlab程序 多特征输入单输出 文章目录 前言回归预测|基于灰狼优化GWO-Transformer-BiLSTM组合模型的数据回归预测Matlab程序 多特征输入单输出GWO-Transformer-BiLSTM 一、GWO-Transformer-BiLSTM模型二、实验…