C++ 计数排序实例详解
发布时间 - 2026-01-11 02:12:18 点击率:次计数排序

计数排序是一种非比较的排序算法
优势:
计数排序在对于一定范围内的整数排序时,时间复杂度为O(N+K) (K为整数在范围)快于任何比较排序算法,因为基于比较的排序时间复杂度在理论上的上下限是O(N*log(N))。
缺点:
计数排序是一种牺牲空间换取时间的做法,并且当K足够大时O(K)>O(N*log(N)),效率反而不如比较的排序算法。并且只能用于对无符号整形排序。
时间复杂度:
O(N) K足够大时为O(K)
空间复杂度:
O(最大数-最小数)
性能:
计数排序是一种稳定排序
代码实现:
#include <iostream>
#include <Windows.h>
#include <assert.h>
using namespace std;
//计数排序,适用于无符号整形
void CountSort(int* a, size_t size)
{
assert(a);
size_t max = a[0];
size_t min = a[0];
for (size_t i = 0; i < size; ++i)
{
if (a[i] > max)
{
max = a[i];
}
if (a[i] < min)
{
min = a[i];
}
}
size_t range = max - min + 1; //要开辟的数组范围
size_t* count = new size_t[range];
memset(count, 0, sizeof(size_t)*range); //初始化为0
//统计每个数出现的次数
for (size_t i = 0; i < size; ++i) //从原数组中取数,原数组个数为size
{
count[a[i]-min]++;
}
//写回到原数组
size_t index = 0;
for (size_t i = 0; i < range; ++i) //从开辟的数组中读取,开辟的数组大小为range
{
while (count[i]--)
{
a[index++] = i + min;
}
}
delete[] count;
}
void Print(int* a, size_t size)
{
for (size_t i = 0; i < size; ++i)
{
cout << a[i] << " ";
}
cout << endl;
}
#include "CountSort.h"
void TestCountSort()
{
int arr[] = { 1, 2, 3, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 2, 2, 2, 4, 5, 8, 9, 5, 11, 11, 22, 12, 12 };
size_t size = sizeof(arr) / sizeof(arr[0]);
CountSort(arr, size);
Print(arr, size);
}
int main()
{
TestCountSort();
system("pause");
return 0;
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# C++
# 计数排序
# 计数排序详解
# C++计数排序详解
# 是一种
# 适用于
# 希望能
# 谢谢大家
# 理论上
# 数为
# 中取
# 组中
# 快于
# namespace
# Windows
# assert
# int
# void
# CountSort
# std
# gt
# pre
# log
# strong
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何正确下载安装西数主机建站助手?
Python企业级消息系统教程_KafkaRabbitMQ高并发应用
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
如何快速配置高效服务器建站软件?
Android 常见的图片加载框架详细介绍
大型企业网站制作流程,做网站需要注册公司吗?
Bootstrap整体框架之JavaScript插件架构
Laravel怎么使用artisan命令缓存配置和视图
如何在万网开始建站?分步指南解析
浅谈Javascript中的Label语句
HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】
如何在云指建站中生成FTP站点?
Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
Laravel如何使用Vite进行前端资源打包?(配置示例)
Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南
javascript日期怎么处理_如何格式化输出
C++时间戳转换成日期时间的步骤和示例代码
html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】
如何用PHP快速搭建高效网站?分步指南
活动邀请函制作网站有哪些,活动邀请函文案?
Laravel集合Collection怎么用_Laravel集合常用函数详解
如何撰写建站申请书?关键要点有哪些?
如何登录建站主机?访问步骤全解析
高防服务器:AI智能防御DDoS攻击与数据安全保障
javascript基本数据类型及类型检测常用方法小结
深圳网站制作的公司有哪些,dido官方网站?
google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤
瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口
如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环
教你用AI润色文章,让你的文字表达更专业
Laravel如何优化应用性能?(缓存和优化命令)
Win11关机界面怎么改_Win11自定义关机画面设置【工具】
如何快速登录WAP自助建站平台?
Laravel如何实现本地化和多语言支持?(i18n教程)
标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析
如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
Win11怎么开启自动HDR画质_Windows11显示设置HDR选项
如何获取上海专业网站定制建站电话?
如何在阿里云部署织梦网站?
中山网站推广排名,中山信息港登录入口?
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
长沙做网站要多少钱,长沙国安网络怎么样?
利用vue写todolist单页应用
Laravel Octane如何提升性能_使用Laravel Octane加速你的应用
高端智能建站公司优选:品牌定制与SEO优化一站式服务
香港服务器网站卡顿?如何解决网络延迟与负载问题?
Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程
微信小程序 scroll-view组件实现列表页实例代码

