【手撕排序算法】---基数排序

个人主页:平行线也会相交
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创
收录于专栏【数据结构初阶(C实现)】
在这里插入图片描述

我们直到一般的排序都是通过关键字的比较和移动这两种操作来进行排序的。
而今天介绍的基数排序并不是依靠关键字的比较和移动来进行数据元素的排序。
基数排序是一种借助多关键字的思想对单逻辑关键字进行排序方法。

本文目录

  • 1️⃣样例演示
  • 2️⃣基数排序介绍
  • 3️⃣算法思想
  • 4️⃣代码示例
  • 5️⃣总结

1️⃣样例演示

基数排序的概念描述和思想比较难懂,所以我们先来一个样例演示。然后再来细细品味基数排序的概念和思想。

我们对下面这个数组中的元素进行排序来进行演示:

int arr[10] = { 177 208 64 910 586 182 405 239 83 1 }

我们按照最低位优先法发来进行排序,可以看到数组中最高位为百位,所以总共要进行三轮排序

第一趟:
在这里插入图片描述
第二趟:
在这里插入图片描述
第三趟:
在这里插入图片描述
可以看到每趟排序后回收数据时按照队列先进先出的思想来进行回收数据

2️⃣基数排序介绍

基数排序(Radix Sort)是一种非比较排序算法,它将待排序的元素按照位数从低位到高位(从高位到低位也可以)依次进行排序。(本文按照从低位到高位为例进行演示)。

3️⃣算法思想

基数排序的算法思想可以概括为以下几个步骤:

1.确定待排序元素的最高位数(即最大位数):首先需要确定待排序元素中的最大值,并计算出它的位数,这决定了排序过程需要进行多少轮。
2.按照最低有效位进行一次稳定的排序:从最低位开始,将待排序元素按照最低有效位的值进行稳定排序,可以使用计数排序或桶排序等算法实现。排序后,元素相对于最低位来说是有序的。
3.按照次低有效位进行稳定排序:将上一轮排序得到的有序序列按照次低有效位的值进行稳定排序。这样,在当前位和低位均已有序的前提下,排序后整个序列相对于当前位来说是有序的。
4.重复执行步骤3,直到按照最高位进行排序:依次对每一位进行稳定排序,直到按照最高位排序完成。最终得到的序列即为完全有序的结果。

4️⃣代码示例

#include<iostream>
#include<queue>
using namespace std;#define RADIX 10
#define K 3          //排序3轮queue<int> Q[RADIX];int getkey(int value, int k)
{int key = 0;while (k >= 0){key = value % 10;value /= 10;k--;}return key;
}void distribute(int arr[], int left, int right,int k)
{for (int i = left; i < right; i++){int key = getkey(arr[i], k);Q[key].push(arr[i]);}
}void collect(int arr[])
{int k = 0;for (int i = 0; i < RADIX; i++){while (!Q[i].empty()){arr[k++] = Q[i].front();Q[i].pop();}}
}
void ridixsort(int arr[], int left, int right)
{for (int i = 0; i < K; i++){//分发数据distribute(arr, left, right, i);//回收数据collect(arr);}}int main()
{int arr[] = { 177 ,208 ,64, 910 ,586, 182, 405, 239, 83, 1 };int n = sizeof(arr) / sizeof(arr[0]);for (int i = 0; i < n; i++){printf("%d ", arr[i]);}printf("\n");ridixsort(arr, 0, n);for (int i = 0; i < n; i++){printf("%d ", arr[i]);}printf("\n");return 0;
}

运行结果如下:
在这里插入图片描述

5️⃣总结

关于基数排序的几大要点总结一下:

1.基数排序是一种非比较排序算法,通过将待排序的元素按照位数进行拆分,并依次对每一位进行稳定的排序,从而达到整体有序的效果。
2.基数排序的稳定性非常重要,即在每一轮排序时,保证相同位上值相等的元素的相对顺序不变。
3.确定待排序元素的最高位数,这决定了排序过程需要进行多少轮。
4.对每一位依次进行稳定排序,可以使用计数排序、桶排序等方法来实现。
5.基数排序的时间复杂度为O(dn),其中d为待排序元素的最大位数,n为元素的个数。空间复杂度为O(n + k),其中k为计数排序或桶排序中桶的个数。
6.基数排序适用于待排序元素位数相对较小且范围较小的情况,但如果待排序元素的位数差异较大,或者位数较多时,性能可能受到影响。
7.基数排序是稳定的排序算法,可以应用于对整数、字符串等类型的数据进行排序。

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

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

相关文章

​MySQL高阶语句(三)

目录 1、内连接 2、左连接 3、右连接&#xff1a; 二、存储过程⭐⭐⭐ 4. 调用存储过程 5.查看存储过程 5.1 查看存储过程 5.2查看指定存储过程信息 三. 存储过程的参数 3.1存储过程的参数 3.2修改存储过程 四.删除存储过程 MySQL 的连接查询&#xff0c;通常都是将来…

微服务一 实用篇 - 5.分布式搜索引擎(ElasticSearch基础)

《微服务一 实用篇 - 5.分布式搜索引擎&#xff08;ElasticSearch基础&#xff09;》 提示: 本材料只做个人学习参考,不作为系统的学习流程,请注意识别!!! 《微服务一 实用篇 - 5.分布式搜索引擎&#xff08;ElasticSearch基础&#xff09;》 《微服务一 实用篇 - 5.分布式搜索…

【广州华锐互动】列车人员疏散VR虚拟演练系统

随着科技的不断发展&#xff0c;虚拟现实(VR)技术已经逐渐应用于各个领域。在火车站安全方面&#xff0c;为了提高旅客的安全意识和应对突发事件的能力&#xff0c;列车人员疏散VR虚拟演练系统应运而生。 列车人员疏散VR虚拟演练系统是一种基于虚拟现实技术的教育培训系统&…

【Vue】day03-VueCli(脚手架)

day03 一、今日目标 1.生命周期 生命周期介绍 生命周期的四个阶段 生命周期钩子 声明周期案例 2.综合案例-小黑记账清单 列表渲染 添加/删除 饼图渲染 3.工程化开发入门 工程化开发和脚手架 项目运行流程 组件化 组件注册 4.综合案例-小兔仙首页 拆分模块-局部…

SpringBoot 如何使用 MockMvc 进行 Web 集成测试

SpringBoot 如何使用 MockMvc 进行 Web 集成测试 介绍 SpringBoot 是一个流行的 Java Web 开发框架&#xff0c;它提供了一些强大的工具和库&#xff0c;使得开发 Web 应用程序变得更加容易。其中之一是 MockMvc&#xff0c;它提供了一种测试 SpringBoot Web 应用程序的方式&…

什么是神经网络?

我们常常使用深度学习来指训练神经网络的过程。 在这里举一个房屋价格预测的例子&#xff1a;假设有一个数据集&#xff0c;它包含了六栋房子的信息。所以&#xff0c;你知道房屋的面积是多少平方米&#xff0c;并且知道这个房屋的价格。这是&#xff0c;你想要拟合一个根据房屋…

【论文阅读】DQnet: Cross-Model Detail Querying for Camouflaged Object Detection

DQnet: Cross-Model Detail Querying for Camouflaged Object Detection DQnet&#xff1a;伪装目标检测中的跨模型细节查询 论文地址&#xff1a;https://arxiv.org/abs/2212.08296 这篇文章提出了一个交叉模型框架&#xff08;CNN-Transformer并行&#xff09;来检测伪装目…

【自启动配置】Ubuntu 设置开机自启动脚本

Ubuntu 开机运行的脚本和当前操作系统运行的级别有关&#xff0c;OS 的运行级别大概分为七个 目录 1、查看 OS 运行级别 2、创建自启动脚本 3、添加软链接 1、查看 OS 运行级别 输入命令 runlevel 查看当前系统运行级别。当前系统的运行级别为 5 2、创建自启动脚本 在 /et…

实训笔记7.19

实训笔记7.19 7.19一、座右铭二、Hadoop的HDFS分布式文件存储系统的相关原理性内容2.1 HDFS上传数据的流程2.2 HDFS下载数据的流程2.3 HDFS中NameNode和SecondaryNameNode工作机制&#xff08;涉及到HDFS的元数据管理操作&#xff09;2.4 HDFS中NameNode和DataNode的工作机制&a…

小程序自定义步骤条实现

效果展示&#xff1a; 支持背景颜色自定义 <view class"hl_steps"><view class"hl_steps_item" wx:for"{{steps}}" wx:key"id"><view class"hl_steps_item_circle_out" style"background-color: {{col…

【SpringCloud Alibaba】(二)微服务环境搭建

1. 项目流程搭建 整个项目主要分为 用户微服务、商品微服务和订单微服务&#xff0c;整个过程模拟的是用户下单扣减库存的操作。这里&#xff0c;为了简化整个流程&#xff0c;将商品的库存信息保存到了商品数据表&#xff0c;同时&#xff0c;使用商品微服务来扣减库存。小伙…

「苹果安卓」手机搜狗输入法怎么调整字体大小及键盘高度?

手机搜狗输入法怎么调整字体大小及键盘高度&#xff1f; 1、在手机上准备输入文字&#xff0c;调起使用的搜狗输入法手机键盘&#xff1b; 2、点击搜狗输入法键盘左侧的图标&#xff0c;进入更多功能管理&#xff1b; 3、在搜狗输入法更多功能管理内找到定制工具栏&#xff0c…

[数据结构 -- C语言] 二叉树(BinaryTree)

目录 1、树的概念及结构 1.1 树的概念 1.2 树的相关概念&#xff08;很重要&#xff09; 1.3 树的表示 2、二叉树的概念及结构 2.1 概念 2.2 特殊二叉树 2.3 二叉树的性质&#xff08;很重要&#xff09; 2.4 练习题 2.5 二叉树的存储结构 2.5.1 顺序存储 2.5.2 链…

Jenkins报警机制的配置与Linux的使用总结

先在钉钉中添加一个机器人 在Configure System中找到机器人选项&#xff0c;并且复制webhook到网络钩子&#xff0c;然后添加机器人的编号、名称和关键词&#xff0c;然后点击测试&#xff0c;如果显示测试成功则表示配置成功&#xff0c;最后保存 再到配置中勾选顶顶机器人的定…

【CMU15-445 FALL 2022】Project #1 - Buffer Pool

About 实验官网 Project #1 - Buffer Pool在线评测网站 gradescope Lab Task #1 - Extendible Hash Table 详见——【CMU15-445 FALL 2022】Project #1 - Extendable Hashing 如果链接失效&#xff0c;请查看当前平台我之前发布的文章。 Task #2 - LRU-K Replacement Polic…

YOLOv5基础知识

定位和检测: 定位是找到检测图像中带有一个给定标签的单个目标 检测是找到图像中带有给定标签的所有目标 图像分割和目标检测的区别&#xff1a; 图像分割即为检测出物体的完整轮廓&#xff0c;而目标检测则是检测出对应的目标。&#xff08;使用框框把物体框出来&#xff…

SAP客制化区域菜单和IMG配置清单

1. 自定义区域菜单 事务代码 SE43&#xff0c;操作如下 添加菜单对象 展示效果 输入区域菜单名称并回车&#xff0c;效果如下 2. 自定义IMG配置 事务代码 SIMGH IMG structure 示例-事务代码入口 示例-表格维护入口 示例-自定义代码控制对象 需要创建dummy表并设置表维护 页面设…

Progressive Dual-Branch Network for Low-Light Image Enhancement 论文阅读笔记

这是22年中科院2区期刊的一篇有监督暗图增强的论文 网络结构如下图所示&#xff1a; ARM模块如下图所示&#xff1a; CAB模块如下图所示&#xff1a; LKA模块其实就是放进去了一些大卷积核&#xff1a; AFB模块如下图所示&#xff1a; 这些网络结构没什么特别的&#xf…

分布式光伏监控系统运维系统实时查看数据分布式光伏电站监控管理

光伏电站是一种利用太阳能发电的设施&#xff0c;随着人们对可再生能源的需求不断增加&#xff0c;光伏电站的建设也越来越普遍。但是&#xff0c;光伏电站的运营和管理需要高质量的监控系统来确保其正常运行。本文将介绍光伏电站监控系统的组成及其原理。 详细软件具体需求可…

【二等奖方案】基于人工智能的漏洞数据分类赛题「道可道,非常道」团队解题思路

2022 CCF BDCI 大赛 数字安全公开赛「基于人工智能的漏洞数据分类」赛题二等奖团队「道可道&#xff0c;非常道」战队获奖方案&#xff0c;赛题地址&#xff1a; http://go.datafountain.cn/s57 团队简介 本团队具有丰富的比赛和项目经验。在AI大赛上多次拿到Top成绩&#xf…