C++ 基数排序

基数排序及其思想 C++代码实现及分析 恋上数据结构笔记 文章目录复习梗概算法思想时间及空间复杂度基数排序基础版代码 及输出结果计数排序函数基数排序函数可视化输出另一种思路完整版代码 复习梗概 思想 如何取数字各个位位数 计数排序保证稳定性怎么保证 算法思想 基数排序思想:本质是按照个位数字,十位数字,百位数字。。。分别对数组进行排序 在排序高位的时候,就把前面低位的最终顺序完全确定了,直到排到最高位就完全确定顺序 而因为每位数字都是0-9的范围,又正好可以采用计数排序 思想不难,主要把思想转换成代码有一定难度,要注意如何取到每一位上的位数:个位:X/1%1 阅读详情

基数排序的原理:

(1)首先,把整数通过求余的方式拆分成“个位、十位、百位、… ”;

(2)然后,统计每个整数的“个位、十位、百位、… ”出现的次数,之后把次数存到以“余数”为编号的桶子里;

(3)最后,通过一个整数出现的次数-1,从而算出正确顺序的位置,再把整数放进去,就有顺序了。

#include <iostream>
#include <stdlib.h>
using namespace std;

/*******************************************/
/*  基数排序
/******************************************/

/*设数组元素为X,
因为要统计个十百到高位,
所以要用求余公式:
  (1)个位数 =(X/1)%10;
  (2)十位数 =(X/10)%10;
  (3)百位数 =(X/100)%10;
  (4) ... ... ...
/**************************************/

int MaxDigit(int array[], int n)  //获取数组中最大元素有多少位
{
	int digit = 1;  //位数从个位开始
	int radix = 10; 
	for (int i = 0; i < n; i++)
	{
		while (array[i] >= radix)
		{
			radix = radix * 10;
			++digit;
		}
	}
	return digit;  //返回最大元素的位数
}


void RadixSort(int array[], int n)  //基数排序函数
{
	int digit = MaxDigit(array, n);
	int temp[6];  //这里以6个元素为例
	int buckets[10];  //数组元素的个、十、百位到高位都是在0~9之间,所以用10
	int base = 1;  //从个位开始
	int i, j, k;

	for( i  = 1; i <= digit; i++)
	{	
		for (j = 0; j < 10; j++)
		{
			buckets[j] = 0;  //初始化buckets[]数组
		}

		for (j = 0; j < n; j++)
		{
			k = (array[j] / base) % 10;  //求余
			buckets[k]++;  //把次数存储到以求余为编号的水桶内,假如余数是5,开始次数buckets[5] = 0, ++后存1次
		}
		    
		for (j = 1; j < 10; j++)
		{
			buckets[j] = buckets[j - 1] + buckets[j];  //统计存储在水桶里元素的总次数
		}

		for (j = n - 1; j >= 0; j--)
		{
			k = (array[j] / base) % 10;  //求余
			temp[buckets[k] - 1] = array[j];  //把array[]数组元素赋给已经排好位置的temp[]数组
			buckets[k]--;  //水桶里元素的总次数减少
		}

		for (j = 0; j < n; j++)
		{
			array[j] = temp[j];  //将排好顺序的元素赋给array[]数组
		}

		base = base * 10;  //个位变十位变百位变高位,所以乘以10
		
	}
}


int main(void)  //主程序
{
	const int n = 6;  //数组元素的数量
	int array[n];
	cout << "请输入6个整数:" << endl;
	for (int i = 0; i < n; i++)
	{
		cin >> array[i];
	}

	cout << endl;  //换行

	RadixSort(array, n);  // 调用RadixSort函数  进行排序

	cout << "由小到大的顺序排列后:" << endl;
	for (int i = 0; i < n; i++)
	{
		cout << "Array" << "[" << i << "]" << " = " << array[i] << endl;
	}

	cout << endl << endl;  //换行

	system("pause");  //调试时,黑窗口不会闪退,一直保持
	return 0;
}

运行结果:

基数排序C++实现 基数排序介绍 基数排序(Radix Sort)是桶排序的扩展,它的基本思想是:将整数按位数切割成不同的数字,然后按每个位数分别比较。 具体做法是:将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。 基数排序图文说明 基数排序图文说明 通过基数排序对数组{53, 3, 54 阅读详情

相关推荐

C++ 基数排序的实现实例代码

这篇文章主要介绍了C++ 基数排序的实现实例代码的相关资料,这里附有实例代码,帮助大家学习理解,需要的朋友可以参考下 C++ 基数排序  大家好,今天带来的是自己实现的用C++完成基数排序.在数据结构,算法分析和程序设计的学习过程中,我们经常也无法避免的要学到排序的算法.排序算法是程序设计过程中使用频率极高的算法之一,其输入是一组无序的序列,要求以升序或者降序的方式输出

I_love_blog的博客 2256

C++实现排序算法之基数排序

一、算法思想 基数排序是一种非比较型整数排序算法,其原理是将众多数字按位分隔后进行排序。 实现步骤: 1.将所有待比较的数字(正整数)统一为同一长度,位数不够的数字前面补0; 2.按照从个位,十位,百位······从低到高的顺序进行排序 3.完成从低位到高位的排序后,待排序数字也就完成了排序 具体举例说明: 初始化序列num{57, 123, 564, 32, 0, 56, 169, 5, 23, 11, 100} 将上述序列的数字按照个位数字进行排序,个位数字取值范围0-9,我们可以将其设置为数组用来存储

qq_38307826的博客 7718

C++实现基数排序算法

函数中,我们首先确定数组中的最大值和最大值的位数。然后,我们创建了一个包含10个桶的二维向量,每个桶对应0-9的个位数字。接下来,我们使用两个嵌套的循环,首先将数组中的元素按照位数放入对应的桶中,然后按照桶的顺序将元素取出重新组成数组。它的思想是将待排序的数字按照个位、十位、百位等位值进行排序,从低位到高位依次进行。基数排序的时间复杂度为O(d * (n + k)),其中d是最大值的位数,n是数组的长度,k是每个桶中的元素个数。基数排序是一种稳定的排序算法,适用于位数固定的正整数排序。

DevWizard的博客 507

数据结构-基数排序(C++)

基数排序是和其他的各类排序方式都不同的方式,之前的各类排序,如快速排序,堆排序,冒泡排序等等,都是通过关键字之间的比较和移动记录这两种操作来实现的,而基数排序不需要记录关键字之间的比较。所谓基数排序就是通过关键字排序的思想对单逻辑关键字进行的方法。

chihiro1122的博客 1693

基数排序源代码 C++实现

C实现基数排序,代码简练,清洗易懂,欢迎下载,有问题的地方请优快云上给我留言加以修正,共勉。

LRTimelapse Pro v7.0.0 激活版下载安装教程 (延迟摄影后期渲染)

LRTimelapse Pro 是一款优秀的高级延时摄影解决方案,使用将为用户提供最全面的工具和功能,从导入和组织您的延时摄影序列、视觉工作流程、在 LRTimelapse 中直接编辑和渲染、视觉去闪烁等等,功能齐全,可以使用 LRTimelapse Pro 编辑多个序列时显著提高您的效率,轻松在 LRTimelapse 中配置和使用色彩管理,进行长期延时编辑,在 LRTimelapse Pro 中使用长期工作流程。为延时编辑、关键帧、分级和渲染提供最全面的解决方案。

wyqshusan的博客 3467

基数排序C++实现

基数排序C++实现基数排序C++实现 基数排序 概念见基数排序。 C++实现 #include <iostream> #include <vector> using namespace std; /** * 获取一个数组的最大值对应的十进制位数 */ int getMaxBit(std::vector<int> nums) { int max_num = nums[0], bit = 0; for(int num : nums) max_num = max

Tsavorite的博客 460

语言随机效应模型_线性混合效应模型 VS 方差分析

线性混合效应模型相比方差分析具有很多优点。为了让大家更直观的了解,我们来做一下两者的对比。基于模拟的方法,生成了以下数据dat_sim:这种数据格式是长格式,也就是从实验软件导出来的那种数据格式。这种数据格式可以直接使用线性混合效应模型进行分析。该实验设计是被试内项目间的单因素两水平设计。category是自变量,两个水平分别是outgroup和ingroup,outgroup比ingr...

weixin_31960565的博客 2688

C++基数排序

目录 一、概述 二、代码 三、程序运行情况 一、概述 1、基本思想(沿袭自桶排序): 从低位开始,对所有数字进行排序。例如第1轮排序后,数字的个位数要有序;第2轮排序后,数字的十位数要有序,如果十位数相同的数,个位数要按照之前的相对顺序摆放;依次类推直至最高位排序完成。过程如下图: 二、代码 C++利用vector实现 /*======================...

幻欢子 1542

[密码学实战]商密TLCP协议抓包解析与深度分析(二十九)

[密码学实战]商密TLCP协议抓包解析与深度分析(二十九)

曼岛_的博客 633

19、英国模式:银行体系的演变与现代金融架构

本文深入探讨了英国银行体系从专业化向全能银行的演变过程,分析了自律监管模式的优劣,并解析了围栏制度对金融稳定的影响。同时,文章还介绍了信用合作社、建筑协会和投资银行的角色与转型,全面展示了英国金融体系的多样性与复杂性,以及其在全球金融市场中的重要作用。

embedding5hiker的博客 105

c++实现基数排序

代码说明 代码是我亲自码的,调试通过的,代码中有算法思想和详细的注释,一目了然。 项目已经上传到我的github:https://github.com/yisun03/sort 项目中近期会陆续更新十种排序算法的c++实现代码以及其思想。 术语说明 1、稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 仍然在 b 的前面,则为稳定排序。 2、非稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 可能不在 b 的前面,则为非稳定排序。 3、原地排序:原地

Yi Sun的博客 3627

Hadoop在大数据领域的电商数据分析案例

随着电商行业的迅猛发展,每天都会产生海量的数据,如用户浏览记录、购买行为、商品信息等。如何从这些数据中提取有价值的信息,为电商企业的决策提供支持,成为了电商企业面临的重要问题。Hadoop作为一个开源的分布式计算平台,具有高可靠性、高扩展性和高效性等特点,能够很好地处理大数据。本文的目的就是通过实际案例,详细介绍Hadoop在电商数据分析中的应用,范围涵盖了从数据采集、存储到分析的整个流程。本文首先介绍背景信息,让读者了解Hadoop在电商数据分析中的重要性和应用场景。

Java大师兄的博客 1179

[C++]基数排序的实现

  大家好,今天带来的是自己实现的用C++完成基数排序.在数据结构,算法分析和程序设计的学习过程中,我们经常也无法避免的要学到排序的算法.排序算法是程序设计过程中使用频率极高的算法之一,其输入是一组无序的序列,要求以升序或者降序的方式输出一组有序的序列.对于如二分查找等算法,要求输入是有序的序列,也就是要先排序后查找,由此可见排序算法的重要性.   广为人知的排序算法有冒泡排序,还有选...

bam2332的博客 317

电子电器架构刷写方案——General Flash Bootloader

### 文章大体有如下内容: ### 1、简介 ### 2、刷写系统概述 ### 3、Flash Bootloader刷写流程 ### 4、Flash Bootloader架构介绍 ### 5、关于刷写的思考

Soly_kun的博客 2211

PyCharm 2024最新版图文安装教程(python环境搭建+PyCharm安装+运行测试+汉化+背景图设置)

PyCharm 2024新版图文安装教程(python环境搭建+PyCharm安装+运行测试+汉化+背景图设置)

Code_流苏:在代码中寻诗意,在实践中觅真知 4万+

基数排序算法——C++

​基数排序的主要思想是选择多位基数依次进行排序,利用每次排序后还是相对有序,也就是稳定排序性质,依次比较完所有基数后,完成整个数组排序。其中,每次比较基数比如对整数进行排序时可以采用计数排序,因为整数位数有限并且每个位上的数值范围是0-9,所以最适合采用优化后计数排序对每个基数进行排序。 时间复杂度为O(n + m),空间复杂度为O(n + m),其中n为数组个数,m为数组最大值位数。 基数排序跟数组规模有关,假如规模很大的话,不一定比快速排序更优,故需要就具体数据模块进行分析。 一、代码实现分

净无邪博客 3013

AI绘画与医疗可视化:用AI生成医学插图的实践

医疗可视化是医学教育、临床沟通和学术研究的核心工具。传统医学插图依赖手工绘制或专业3D建模,存在制作周期长、成本高、更新迭代慢等问题。随着深度学习技术的发展,AI绘画工具(如Stable Diffusion、DALL-E)展现出强大的图像生成能力,但医疗领域对插图的解剖准确性、标注规范性和语义完整性有极高要求,通用AI模型难以直接应用。本文聚焦AI技术与医疗领域的交叉创新,系统阐述如何通过数据预处理、模型定制化训练和后处理校验,构建符合医疗标准的插图生成系统。

大模型应用工坊 1788

基数排序的C++实现

#include <iostream> #include <vector> using namespace std; //传入一个n,返回10的n次方 int my_ten_power(int n) { int power=1; for(int i=0;i<n;i++) power*=10; return power; } //传入一个值num和表示位...

Lemon_Yark的博客 373

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C++排序算法之基数排序

基数排序 基数排序是一种非比较的排序算法,它是以桶排序为基础的,其思想是“多关键字排序”。 基数排序有两种实现方式: (1)最高位优先:即先按最高位排成若干子序列,在对每个子序列按次高位排序。      举例:扑克牌的例子,就是先按花色排成4个子序列,在对每种花色的13张牌进行排序,最终使所有的扑克牌整体有序。 (2)最低位优先:这种方式不必分成子序列,每次排序全体元素都参与

YF_Li123的博客 2008

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

基数排序C/C++代码实现

链式基数排序: 分配类排序不需要比较关键字的大小,它 是根据关键字中各位的值,通过对待排序记录进行若干趟 “ 分配 ” 与 “ 收集” 来实现排序的,是一种 借助于多关键字排序的思想对单关键字排序的方法。基数排序(RadixSorting)是典型的分配类排序 算法属性: 时间复杂度为O(n) 空间复杂度为O(n+ rd),(假设每个记录含d个关键字,每个关键字的取值范围为rd个值)。 稳定排序。 基数排序使用条件有严格的要求:需要知道各级关键字的主次关系和各级关键字的取值范围。 代码如下: #inclu

Ycy的博客 4493

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

基数排序的C++实现(解析)

基数排序(Radix sort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。基数排序的发明可以追溯到1887年赫尔曼·何乐礼在打孔卡片制表机(Tabulation Machine)上的贡献。时间复杂度是 O(k·n),其中n是排序元素个数,k是数字位数。——

lslxdx的专栏 2322

基数排序(C++实现)

基数排序 #include <iostream> #include <list> using namespace std; int maxdigit(int data[], int n) { int d = 1; // 计位器: 1 1位数 2 两位数 int p = 10; // 倍数 // 求数组中最高位的的位数 for (int i = 0; i < n; ++i) { while (data[i] >= p) { p *= 10;

I,Pencil 1881

C++实现基数排序

C++实现基数排序: //基数排序 #include using namespace std; void radixsort(int *a,int size) { int d=1;//位数 for(int i=0;i { int p=a[i]; int max=1; while(p/10) { p=p/10; max++; } if(d d=max;

坚持 984

c++之基数排序

#include<iostream> #include<vector> #include<string> using namespace std; int MaxBit(const vector<int> &arr)//获得最大位数 { int len = 1; int max = arr[0]; for (int i = 0; ...

weixin_42579072的博客 285
上一篇: C++ 归并排序
下一篇: C++ 计数排序
dong.x_辛旭东
博客等级 码龄9年 11粉丝 13原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值