基数排序|RadixSort|C++实现

news2024/11/25 7:06:38

前言

那么这里博主先安利一些干货满满的专栏了!

首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。

高质量干货博客汇总https://blog.csdn.net/yu_cblog/category_12379430.html?spm=1001.2014.3001.5482


在本篇博客之外,博主一起拿还做过一篇九大排序的博客,是常用的排序的汇总,里面对每一种排序都有很详细的解释和代码实现(纯C),博主这里也把链接给大家。

【排序】万字九大排序宝藏汇总 轻松拿下九大排序算法【带动画】 (包含超详细的解释和注释)icon-default.png?t=N6B9https://blog.csdn.net/Yu_Cblog/article/details/122848138

基数排序的效率和稳定性

平均时间复杂度最坏时间复杂度最好时间复杂度空间复杂度稳定性
O(d(n+r))O(d(n+r))O(d(n+r))O(r)稳定

代码实现

#define _CRT_SECURE_NO_WARNINGS 1

#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
//基数排序
/*
* 核心思想:
* 1.分发数据
* 2.回收数据
*/
//这是一个多关键字排序
//按照位数多趟分发回收
#define K 3 //最多3位数
#define RADIX 10 //十个基数
#include<queue>

//定义基数
queue<int>Q[RADIX];//这个是队列数组--基数排序要做到先进先出 -- 所以使用队列
//找到key
int GetKey(int value, int k) {
	//value:278
	//k:0
	//代表第一次分发,按照8来排
	//所以就把8提取出来就可
	int key = 0;
	while (k >= 0) {
		key = value % 10;
		value /= 10;
		k--;
	}
	return key;//比如一个数字时25256 现在按照个位的6来分,key就返回的时6
}
//分发数据
void distribute(int* arr, int left, int right,int k) {
	//k代表是第几次分发
	for (int i = left; i < right; i++) {//注意这里是左闭右开,所以是<
		//根据key分发,key怎么找,用k来找
		int key = GetKey(arr[i], k);
		Q[key].push(arr[i]);//把arr[i]push到下标为8的队列里面
	}
}
void collect(int* arr) {
	//不需要区分第几次,只需要把数据回收到数组里面即可
	//要检查所有的队列,因为我们不知道哪一些队列有数据哪一些没有
	int k = 0;
	//arr从0开始重新收集
	for (int i = 0; i < RADIX; i++) {
		while (!Q[i].empty()) {
			//说明这个队列里面有数据
			//下面两行其实就是把数据依次放到数组里面去
			arr[k++] = Q[i].front();
			Q[i].pop();
		}
	}
}
void _radixSort(int* arr, int left, int right) {
	for (int i = 0; i < K; ++i) {//最多循环三次
		//有几位数循环几次
		//分发数据
		distribute(arr, left, right, i);//i代表我现在操作的时哪一位数
		//回收数据
		collect(arr);
	}
}
void radixSort(int* arr, int sz) {
	int left = 0;
	int right = sz;
	//[right,left)
	_radixSort(arr, left, right);
}
int main() {
	int arr[] = { 278,109,63,930,589,184,505,269,8,83 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	for (int i = 0; i < sz; i++) {
		cout << arr[i] << " ";
	}
	cout << endl;
	//
	radixSort(arr, sz);
	//
	for (int i = 0; i < sz; i++) {
		cout << arr[i] << " ";
	}
	cout << endl;
	return 0;
}

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

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

相关文章

电商 api 接口文档

电商 api 接口文档 1、开篇 欢迎使用ShowDoc&#xff01; API格式&#xff1a; 备注&#xff1a;电商API必须返回如下3个字段&#xff1a; 参数名必选类型说明status是int状态message是string信息提示result否mix结果 2、用户相关 2.1、登录/退出 简要描述&#xff1a; …

【复盘】记录一次类型不一致导致的Kafka消费异常问题

背景 业务主要是通过A系统向B系统写入Kafka&#xff0c;然后B系统消费Kafka 将结果写到Kafka中&#xff0c;A进行消费最终结果。 在整个流程中&#xff0c;A写入Kafka会写入一张 record1表记录&#xff0c;然后在A消费最终结果的时候也记录一张record2表。主要改动的话 只是B系…

从Web2到Web3:区块链技术的未来前景

随着互联网的发展&#xff0c;Web1.0、Web2.0 和 Web3.0 成为了人们口中津津乐道的话题。那么&#xff0c;这三种网络时代究竟有什么区别呢&#xff1f; Web1.0 是一个只读的时代&#xff0c;那个时候&#xff0c;用户只能浏览网页&#xff0c;无法进行互动和创作。Web2.0 则是…

什么是社会智商?24种人格力量之社会智商的力量

什么是社会智商&#xff1f; 社会智商指的是将人的智力具体化&#xff0c;自己对他人的了解以及自我剖析能力的高低。一般而言&#xff0c;社会智商越高&#xff0c;对他人的观测能力越高&#xff0c;自我剖析就越透彻。社会智商来源于via 24种人格力量&#xff0c;是人格的优…

FPGA实现UART协议的接收与发送

一、接收模块uart_rx.v UART协议&#xff0c;空闲时&#xff0c;TX和RX数据线都是通过上拉电阻拉高的状态&#xff0c;这样才能在起始位到来时检测到一个下降的边沿。 UART数据格式 uart_rx.v模块输入输出示意图 RX_start。首先&#xff0c;找到起始位的开始时刻RX_start&…

在程序员从业生涯中,哪本书让你醍醐灌顶?

推荐《程序员的README》 [美] 克里斯里科米尼&#xff08;Chris Riccomini&#xff09; 著&#xff0c;付裕 译 每名新入行的工程师在开始工作之前要阅读的书&#xff01;10年大型公司初级工程师指导经验的行业大咖教你如何开启职业生涯、扩展工作技能、应对糟糕管理&#xff0…

信音电子在创业板IPO:募资约9亿元,预计上半年收入约4.3亿元

7月17日&#xff0c;信音电子&#xff08;中国&#xff09;股份有限公司&#xff08;下称“信音电子”&#xff0c;SZ:301329&#xff09;在深圳证券交易所创业板上市。本次上市&#xff0c;信音电子的发行价为21.00元/股&#xff0c;发行数量为为4300万股&#xff0c;募资总额…

Java 压缩多个文件为zip包(中间不生成临时文件,直接压缩为zip二进制流),以及解压zip包二进制流为文件

Java 压缩多个文件为zip包及解压zip包以及压缩多文件为zip文件流解压zip二进制流&#xff08;中间不生成临时文件&#xff0c;直接压缩为zip二进制流&#xff0c;并验证解压&#xff09; 1. 效果图2. 源码 这篇博客将提供俩种方法&#xff0c; 提前生成要压缩的多个文件&#…

vscode debug的方式

在.vscode文件夹下建立launch.json 例子1&#xff1a;调试python 来自 https://github.com/chunleili/tiPBD/tree/amg {"version": "0.2.0","configurations": [{"name": "hpbd 5 5","type": "python&quo…

港联证券|通胀和通缩的区别?通胀对股市有什么影响?

在市场经济上&#xff0c;通货紧缩和通货膨胀是两种比较常见的两种经济现象&#xff0c;那么&#xff0c;通胀和通缩的差异&#xff1f;通胀对股市有什么影响&#xff1f; 港联证证券为大家预备了相关内容&#xff0c;以供参考。 通胀和通缩存在以下差异&#xff1a; 1、定义…

初识操作系统

操作系统 文章目录 操作系统一、上次的问题二、什么是操作系统(Operator System&#xff09;设计操作系统的目的 三、操作系统上下层分别是什么四、先描述&#xff0c;后组织 一、上次的问题 为什么程序运行之前必须先加载到内存&#xff1f; 因为可执行程序&#xff08;文件…

数字化时代,如何做好用户体验与应用性能管理​

引言 随着数字化时代的到来&#xff0c;各个行业的应用系统从传统私有化部署逐渐转向公有云、行业云、微服务&#xff0c;这种变迁给运维部门和应用部门均带来了较大的挑战。基于当前企业 IT 运维均为多部门负责&#xff0c;且使用多种运维工具&#xff0c;因此&#xff0c;当…

【27】SCI易中期刊推荐——计算机科学机器人学(中科院2区)

💖💖>>>加勒比海带,QQ2479200884<<<💖💖 🍀🍀>>>【YOLO魔法搭配&论文投稿咨询】<<<🍀🍀 ✨✨>>>学习交流 | 温澜潮生 | 合作共赢 | 共同进步<<<✨✨ 📚📚>>>人工智能 | 计算机视觉…

arcgis建筑密度容积率覆盖率

大多数研究会把覆盖率当作建筑密度。 用覆盖率更恰当一些。 建筑覆盖率&#xff1a; 建筑物占据面积/街区面积 [Sum_area]/ ([area]*1000000) 排序检查数据&#xff0c;最大值0.75&#xff0c;最小值0. 建筑覆盖率&#xff0c;建筑密度的范围都应该在0-1之内&#xff0c;不是…

linux之Ubuntu系列(三)远程管理指令☞SSH 高级应用 RSA非对称加密 以及免密登录,配置别名

对称加密 、非对称加密 1、对称加密中加密和解密使用的秘钥是同一个&#xff1b;非对称加密中采用两个密钥&#xff0c;一般使用公钥进行加密&#xff0c;私钥进行解密。 2、对称加密解密的速度比较快&#xff0c;非对称加密和解密花费的时间长、速度相对较慢。 3、对称加密的…

【文末送书】AIGC时代的数据分析与可视化

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。搜…

C语言实现:offsetof(OFFSETOF)宏的实现

C语言实现&#xff1a;offsetof宏的实现 offsetof:求结构体成员的偏移量 offsetof:求结构体成员的偏移量 直接上代码&#xff1a; #define OFFSETOF(type,member) ((size_t)(&(((type*)0)->member))) 图解&#xff1a; 图中测试原码&#xff1a; #include<stdi…

Centos Stream9安装vim代码提示coc的详细过程

Centos Stream9安装vim代码提示coc的安装步骤&#xff1a; 1、安装字体 https://github.com/ryanoasis/nerd-fonts/releaseshttps://github.com/ryanoasis/nerd-fonts/releases wget https://github.com/ryanoasis/nerd-fonts/releases/download/v3.0.2/Hack.tar.xz 下载后&a…

短视频seo抖音矩阵源码开发搭建技术解析

一、 短视频seo抖音矩阵源码开发需要考虑以下几个方面&#xff1a; 技术选型&#xff1a;选择合适的开发语言、框架和数据库&#xff0c;常用的开发语言有Java、PHP等&#xff0c;常用的框架有Spring、Django等&#xff0c;常用的数据库有MySQL、MongoDB等。 服务器的选择&…

若依框架系列教程(RuoYi-Vue前后端分离版本)

视频教程见评论 相关文档&#xff1a; https://www.cnblogs.com/52mqq/p/16068330.html 若依 Ruo-Yi&#xff08;分离版&#xff09;学习笔记 若依框架RuoYi项目运行启动教程【傻瓜式教程】_若依前端怎么启动_紫陌~的博客-CSDN博客 一定要看上面那个傻瓜式教程&#xff0c;…