排序算法入门——基数排序

Ubuntu命令行创建文本文件:从基础命令到高效自动化实践 在Linux系统管理与自动化运维中,文本文件操作是核心基础技能。其原理基于Shell的重定向机制和标准输入输出流,通过管道符和文件描述符实现数据流转。掌握命令行创建文本文件的技术价值在于提升工作效率、实现可重复的自动化流程,并能在无图形界面的服务器环境中完成系统配置、日志记录等关键任务。应用场景涵盖脚本编写、配置文件生成、数据处理和系统监控等多个领域。本文聚焦Ubuntu环境,深入解析touch、echo、cat等命令的实战用法,特别针对自动化脚本和系统管理中的文件操作需求,提供高效解决方案。 阅读详情

前言

        基数排序的排序原理不难理解,但是在算法设计上,个人感觉还是比那些常见的排序要难的,耐心慢慢一步步理解,还是比较容易看懂的,注意基数排序有两种,一种是高位优先,一种是低位优先,在这里我只讲低位优先,即先排个位,再排十位……….

时间复杂度

·        基数排序的时间复杂度为O (nlog(r)m),其中r为所采取的基数,而m为堆数

注:比其他的稳定

排序原理

排序数字为16,21,5,49,33,456,327,56,65,234

这是我测试的实例数字,下面有源程序,最高位有三位(程序里max=3),所以要进行三遍排序(下图只排了两次,第三遍也一样啦),第一遍,以个位数分桶,个位相同放在一个桶里,然后把桶里的数在依次拿出来,第一次拿出,顺序为21,33,234,5,65,16,456,56,327,49   同理第二遍以十位数字比较,把第一遍拿出的数字再放进桶中,三次循环得到结果。

个位数是(第一遍)

桶

 

十位数是(第二遍)

桶

 

0

 

 

0

5

 

1

21

 

1

16

 

2

 

 

2

21,327

 

3

33

 

3

33,234

 

4

234

 

4

49

 

5

5,65

 

5

456,56

 

6

16,456,56

 

6

65

 

7

327

 

7

 

 

8

 

 

8

 

 

9

 49

 

9

 

 

 

c++

该排序实例,是按部就班的按照桶来放的,但是由于在排序过程中用到的桶是二维数组,因此造成一定的资源浪费,但二维数组前一个数字表示桶号,后一个表示放的位置,极大的降低了理解难度,因为每个桶内放的个数是用count数组存储,便于从桶内相应位置取出数字。

#include<iostream>
using namespace std;
int max(int date[],int n){//此函数用于求解所给数组中最大数有几位
	int max=0;
	for(int i=0;i<n;i++){
		int count=1,tem=date[i];
		while(tem/10!=0){//计算每个数的位数,用count计数
			tem=tem/10;
			count++;
		}
		if(count>max)
			max=count;//把最大位数赋值max
	}
	return max;
}
void basesort(int date[],int n){
	int maxx=max(date,n);//取得最大位数
	int num=1;
	for(int i=0;i<maxx;i++){//位数决定排序循环次数
		int count[10];//声明count为了统计每个桶放了几个数
		int temp[10]['n'];//temp相当于桶,前一个数标记第几个篮子,后一个为了标记放的个数
		for(int f=0;f<10;f++){//对声明数组初始化
			count[f]=0;
		}
		for(int g=0;g<10;g++){//对声明数组初始化
			for(int z=0;z<n;z++){
				temp[g][z]=0;
			}
		}
		for(int j=0;j<n;j++){
			int fg=date[j]/num;//num是变量,因为每次循环比较的位是不同的
			int k=fg%10;
			count[k]++;
			int te=count[k]-1;
			temp[k][te]=date[j];//把数据放k桶的te位上存储
		}
		int b=0;
		for(int h=0;h<10;h++){
			if(count[h]>0){//h>0说明h桶内有数字存储
				for(int v=0;v<count[h];v++){//count[h]是h桶的存储个数
					date[b]=temp[h][v];//把桶内排好的数全都倒给要排序的数组,进行下轮排序
					b++;
				}
			}
		}
		num=num*10;
	}
}

void print(int date[],int n){//打印排好序的数组
	for(int i=0;i<10;i++){
		cout<<date[i]<<" ";
	}
	cout<<endl;
}
int main(){
	int date[10]={16,21,5,49,33,456,327,56,65,234};
	basesort(date,10);
	print(date,10);
	return 0;
}

运行截图

十大经典排序算法-基数排序算法详解 十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十大经典排序算法-归并排序算法详解 十大经典排序算法-堆排序算法详解 十大经典排序算法-计数排序算法详解 十大经典排序算法-桶排序算法详解 十大经典排序算法-基数排序算法详解 一、什么是基数排序 1.概念 基数排序(Radix Sort)是将待排序序列的每个元素统一为同样位数长度的元素,位数较短的通过补0达到 阅读详情

相关推荐

【排序算法(七)】基数排序

基本思想 基数排序(Radix Sort)是桶排序的扩展,它的基本思想是:将整数按位数切割成不同的数字,然后按每个位数分别比较。 具体做法是:将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。 通过基数排序对数组{53, 3, 542, 748, 14, 214, 154, 63...

无意呢的博客 1万+

基数排序 习题

基数排序 时间限制:10 sec 空间限制:1 GB 问题描述 给定 n 个 [0,2^k) 之间的整数,请你将它们升序排序。 由于 n 可能很大,为了避免过大的输入、输出规模,我们会在程序内部生成数据,并要求你输出排序后序列的哈希值。具体方法如下(用c++代码展示): typedef unsigned int u32; u32 nextInt(u32 x){ x^=x<<13; x^...

weixin_43829465的博客 1128

算法:排序算法之基数排序

在前几回我们已经对冒泡排序、直接插入排序、希尔排序、选择排序、快速排序、归并排序、堆排序、计数排序、桶排序做了说明分析。本回,将对基数排序进行相关说明分析。 一、排序算法系列目录说明 冒泡排序(Bubble Sort) 插入排序(Insertion Sort) 希尔排序(Shell Sort) 选择排序(Selection Sort) 快速排序(Quick Sort) 归并排序(Me...

7-SEVENS 1423

手把手教你基数排序

说到基数排序,个人认为这是一种非常神奇的排序方式。在小编初次了解它时,就被他魔幻的排序方式所折服。一.排序思路小编喜欢生动一点的讲解方式,大家请跟着小编的思路,一起探究一下吧,首先让我们假设有一组数:这里共有10个数,最大的989共有三位,所以我们比较到百分位即可,即遍历三次。首先假定我们准备10个桶。第一步,按个位存放 ,依次拿出。存放方式与哈希桶类似。比如32的个位是2,那么32就放入下标为2的桶中。如果有数放入同一个桶中,那么就按队列存放,确保先入先出。 之后,按下标将数据依次拿出,桶中有多个数据的先

weixin_61857742的博客 474

AstrBot插件开发全攻略:从零编写一个天气查询插件(Python实战)

本文提供了一份详细的AstrBot插件开发实战指南,手把手教你使用Python从零编写一个智能天气查询插件。内容涵盖插件系统核心设计、开发环境搭建、API调用与数据处理、自然语言交互实现以及插件打包发布全流程,帮助你快速掌握基于AstrBot框架的聊天机器人功能扩展技能。

weixin_29212867的博客 1082

从零搭建openEuler ARM64开发测试环境:手把手教你用libvirt+KVM配置虚拟机(含VNC远程安装)

本文详细介绍了如何在ARM64平台上从零搭建openEuler开发测试环境,涵盖libvirt和KVM配置虚拟机的完整流程,包括环境准备、存储配置、网络优化、XML配置详解以及VNC远程安装。特别针对华为欧拉(openEuler)系统进行了优化,帮助开发者快速构建高效的ARM架构虚拟化环境。

weixin_30545945的博客 586

排序算法-基数排序

排序算法-基数排序 算法思想 完整代码实现: package com.sort; import java.util.LinkedList; import java.util.Queue; public class BaseSort { public static void main(String[] args) { int[] nums = {3,89,4,53,6,825,900,0,1000,53}; basesort(nums,nums.length);

qq_36944952的博客 4130

Joern实战:从代码导入到Python分析的全流程避坑指南(附常见错误解决方案)

本文详细介绍了Joern静态分析工具从代码导入到Python分析的全流程实践指南,包括环境配置、代码导入技巧、数据库服务优化、Python交互分析及性能调优等关键步骤。特别针对常见错误提供了实用解决方案,帮助开发者高效进行代码安全分析和漏洞挖掘。

weixin_28309571的博客 138

数据结构算法———基数排序

数据结构算法介绍之基数排序(Radix Sort)

1万+

【生物识别模组介绍】静脉识别模组

静脉识别技术是依据流动的静脉血液中的血红蛋白对近红外光有所吸收,通过近红外光照射手指、手掌、面部、腕部呈现的分布图像,再使用特定的算法对图像进行特征提取、分析比对,从而进行身份认证识别。静脉结构相同几率为34亿分之一,每个人的静脉结构具有独特性,而且静脉特征图像自成年后终身不变,不受外部环境、疾病等影响,是人体最稳定的生物特征之一。商务合作联系:newmagicmission@gmail.com图1.0。

upupDay's blog 898

东方财富个股实时行情爬虫实战:从入门到精通,手把手教你构建股票数据采集系统

在量化投资、股市分析和数据挖掘等领域,获取实时、准确的股票行情数据是第一步也是至关重要的一步。东方财富网作为国内最大的财经门户网站之一,提供了丰富的股票数据和实时行情接口。本文将带你从零开始,构建一个完整的东方财富个股实时行情爬虫系统,涵盖股票代码遍历、JSON接口分析、反爬虫策略应对、数据持久化存储等核心技术点。目录前言一、项目背景与目标1.1 为什么要爬取东方财富数据?1.2 项目目标1.3 技术栈二、接口分析与逆向工程2.1 寻找真实数据接口2.2 简化接口2.3 字段含义对照表三、股票代码获取。

2201_76125261的博客 144

基数排序 详细讲解

1、基数排序(桶排序)介绍 基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是通过键值的各个位的值,将要排序的元素分配至某些“桶”中,达到排序的作用 基数排序法是属于稳定性的排序,基数排序法的是效率高的稳定性排序法 基数排序(Radix Sort**)是桶排序的扩**展 基数排序是1887年赫尔曼·何乐礼发明的。它是这样实现的:将整数按位数切割成不同的数字,然后按每个位数分别比较

舒克日记的博客 8967

ESP32 DW1000 UWB 室内定位系统

详细介绍ESP32 DW1000 UWB 室内定位系统的设计演示demo。

DT程序员的博客 1662

十大排序算法全面解析-Java实现

前言 算法就是编程的灵魂,不会算法的程序员只配做码农。之前看到这句话受到一万点暴击伤害!同时也激起了自己的斗志,坦白说作为一个程序员,我一直知道算法的重要性,但是在算法这一块一直做的不够好,甚至除了大学学过这门课程之后就很少去接触它。因为一开始我就给算法贴上了难,烦,不怎么用的标签,现在想来其实都是在逃避问题。所以决定亡羊补牢,从头开始! 介绍 算法的学习也是有着阶段性的,从入门到简单,再到复杂...

xfr140309的博客 735

《手把手教你YOLOv9实战》,改进专栏目录

为了提供友好的操作效果,本专栏将会手把手搭建可视化界面,我将用PyQt5 搭建一个可视化界面,可视化界面能够实现基本的图像加载与检测功能,如支持视频、摄像头,还支持更换不同的 YOLOv9 模型,并适应不同领域(如口罩检测系统、人脸检测系统、工业缺陷检测系统等),界面灵活、功能强大。通过YOLOv9加以改进设计,形成新的算法框架,一起水科研和论文,专栏会一直持续更新中,本专栏适合目标检测、分割、分类。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 2148

29. 如何通过 ABAP 代码给 SAP OData 元数据增添注解

我们先看下效果,在 MPC_EXT 类的 DEFINE 方法里编写 ABAP 代码之后,用 Postman 使用 url 访问 OData metadata,在返回的数据里,能看到我们用 ABAP 代码添加的自定义注解。你好,请问可以不可以在odata里面通过什么设置,从而自动给metadata.xml中加上注解,实现value help的功能,还是说每次需要在metadata.xml中修改?的词汇引用,然后为命名空间 com.sap.vocabularies.UI.v1 声明了一个别名。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1656

排序算法之基数排序

一、例子演示 现有如下序列:{3,44,38,5,47,15,36,32,50},现在要利用基数排序算法对这9个元素进行从小到大的排序,怎么排呢? 首先,排序的初始化状态如图1所示 图1:初始化状态 第二,将这9个元素按个位分配到相应的位置上,如图2所示 ...

xiaoxi_hahaha的博客 2万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

必学排序算法——基数排序

基数排序算法是必须掌握的一种基础算法,在一些比较出名的竞赛acm、蓝桥杯,并且在一些公司面试题中都可能会出现,而且作为简单题我们必须要拿下,所以我们要引起重视,下面让我们来深入了解基数排序算法。基数排序(Radix Sort)是一种非比较型整数排序算法,通常用于对数字进行排序。它的基本思想是将数字按位(从最低有效位到最高有效位,或从最高有效位到最低有效位)进行排序,通常使用计数排序或桶排序作为子排序算法。基数排序的时间复杂度为 O(nk),其中 n 是待排序的数字个数,k 是数字的最大位数。

ycs66的博客 3436

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

经典排序算法总结

经典的排序算法大概有九种,作为算法学习的入门级算法,需要很好的掌握,而且,这些也是找工作面试时经常会被问到的一个问题。 经典的排序算法大概有:快速排序、选择排序、冒泡排序、插入排序、归并排序、堆排序、计数排序、基数排序、桶排序。这里先挖个深坑,以后慢慢填。 (分析要包含代码,时间复杂度,进一步的改进) 我经常把快排和选择排序搞混,快排是指选择一个数,然后将所有数中比该数小的放到该数左侧,比该

明歌天下 451

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【排序算法】之基数排序

【排序算法】之基数排序

卓越之识论道,平常之识论事,狭隘之识论人 1886

排序算法—基数排序

基数排序 基数排序(Radix Sort)属于分配排序的一种,由赫尔曼·何乐礼发明提出。之前的排序算法都是基于关键字之间的比较,判断大小,然后再进行调整。分配排序则不同,它无需进行关键字的比较,而是利用关键字的结构,通过“分配”和“收集”的办法来实现排序。分配排序可分为箱排序和基数排序两类。 题目描述 给出一组数据,根据由小到大顺序输出。 输入要求: 输入一个整数n(数据长度) 输入n个数据 输出...

Su_Rui_的博客 1297

经典排序算法之基数排序

经典排序算法之基数排序 1. 基数排序 基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。 2. LSD 基数排序动图演示 3.排序思路 想一下平时对比两个时间大小是如何进行比较的。一般都是先对比年份,如果年份大的肯定就大。接下来再对比月份,然后日。为什么这么比较呢,因为权重不一样权重顺序是:年>月>日 而基数排序的思路跟这个有点类似。将每一个数分成一

qq_47897078的博客 2636

基数排序--基于计数排序的线性时间复杂度的排序算法

我们前面提到了一种时间复杂度为O(n+k),其中k是待排序列最大值的排序算法--计数排序,复习请点击此处。本文我们将继续介绍一种线性时间复杂度的排序算法--基数排序,这种排序算法的时间复杂度为Θ(d(n+k)),这种排序基于我们之前将的计数排序,其中n表示待排序列的规模,d表示待排序列的最大位数,k表示每一位数的范围,这也是一种时间换空间的算法。 一、适用情况     我们看这个算法的

TimeTDIT的博客 1万+
上一篇: 排序算法入门——快速排序
下一篇: StringBuffer /StringBuilder和String 的区别
zhen921
博客等级 码龄9年 58粉丝 51原创
评论 11
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值