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

【数据结构】计数排序:有时比快排还快的整数排序法

计数排序

排序思想:

        计数排序是一种非比较排序,即不通过两个数的比较来对数组排序。

        1. 统计相同元素出现次数

        2. 根据统计的结果将序列回收到原来的序列中

        了解完这种排序的思想之后,我们很容易想得到:那这样不是很费空间吗?——是的,他很费空间,所以他不适用于数的范围很大的情况。而且他只适用于整形。

        但是他很快,只要你范围小,他比快排还快。

/* 计数排序 */
void CountSort(int* a, int n)
{assert(a);int min = a[0];int max = a[0];// 遍历数组找出最大值和最小值,得到范围for (int i = 0; i < n; i++){if (a[i] < min)min = a[i];if (a[i] > max)max = a[i];}// 比如最大值为9,最小值为0,9-0=9,但实际是10个数据// 所以范围要+1int range = max - min + 1;int* countArr = (int*)malloc(sizeof(int) * range);// 初始化一下countArrmemset(countArr, 0, sizeof(int) * range);// 统计次数for (int i = 0; i < n; i++){countArr[a[i] - min]++;}// 排序int index = 0;for (int i = 0; i < range; i++){while (countArr[i]--){a[index] = i + min;index++;}}free(countArr);
}

计数排序特征总结:

        1. 计数排序在数据范围集中时,效率很高,但是适用范围及场景有限。

        2. 时间复杂度:O(N+range)

        3. 空间复杂度:O(range)

http://www.xdnf.cn/news/1353025.html

相关文章:

  • Ubuntu 操作系统深度解析:从入门到精通(2025 最新版)
  • Java JVM 超级详细指南
  • 在Linux环境中为Jupyter Lab安装Node.js环境
  • 云计算之云主机Linux是什么?有何配置?如何选?
  • JavaSpring+mybatis+Lombok,实现java架构[保姆教程]
  • Linux PCI 子系统:工作原理与实现机制深度分析
  • Bartender 5 Mac 多功能菜单栏管理
  • 【LeetCode】85. 最大矩形 (暴力枚举)
  • 嵌入式软件/硬件工程师面试题集
  • MySql知识梳理之DDL语句
  • 力扣hot100:搜索二维矩阵与在排序数组中查找元素的第一个和最后一个位置(74,34)
  • 知识蒸馏 Knowledge Distillation 概率链式法则(Probability Chain Rule)
  • Java接口响应速度优化
  • springboot项目结构
  • leetcode80:删除有序数组中的重复项 II(快慢指针法)
  • 日语学习-日语知识点小记-进阶-JLPT-N1阶段蓝宝书,共120语法(6):51-60语法
  • Day33 MLP神经网络的训练
  • 「ECG信号处理——(24)基于ECG和EEG信号的多模态融合疲劳分析」2025年8月23日
  • 前端 H5分片上传 vue实现大文件
  • 【卫星通信】超低码率语音编码ULBC:EnCodec神经音频编解码器架构深度解析
  • piclist+gitee操作指南
  • 【Day 11】238.除自身以外数组的乘积
  • Transformer核心概念I-token
  • SpringBoot 快速上手:从环境搭建到 HelloWorld 实战
  • Excel 条件高亮工具,秒高亮显示符合筛选条件的行数据
  • 「数据获取」《中国能源统计年鉴》(1986-2023)(获取方式看绑定的资源)
  • 蓝桥杯算法之基础知识(2)——Python赛道
  • 【51单片机学习】直流电机驱动(PWM)、AD/DA、红外遥控(外部中断)
  • mmdetection:记录算法训练配置文件
  • A Large Scale Synthetic Graph Dataset Generation Framework的学习笔记