当前位置: 首页 > article >正文

数据结构:基数排序(c++实现)

在这里插入图片描述

个人主页 : 个人主页
个人专栏 : 《数据结构》 《C语言》《C++》《Linux》《网络》 《redis学习笔记》

文章目录

  • 基数排序的定义和基本原理
    • 基本原理
    • 具体步骤
  • 基数排序的优缺点:
  • 代码实现
  • 总结


基数排序的定义和基本原理

基数排序(Radix Sort)是一种非比较型整数排序算法,其基本原理是根据数字的每一位来进行排序。具体来说,基数排序通过将整数按位数切割成不同的数字,然后按每一位数进行排序(不断接近有序的过程),最终得到有序序列。


基本原理

  1. 按位排序:基数排序从最低有效位(Least Significant Digit, LSD) 或 最高位有效位(Most Significant Digit, MSD)开始,逐位进行排序。对于有d位的整数(排序整数的最长长度d),需要进行d趟排序。
  2. 使用桶排序:在每一轮排序中,将待排序的数字分配到不同的桶中,每个桶代表一个特定的数字范围。然后,从桶中取出数字并从新组合,形成新的有序序列
  3. 重复排序:重复上述过程,直到所有位数都排序完成。

具体步骤

  1. 确定最大值:找出待排序数组中的最大值,以确定需要进行多少趟排序
  2. 分配和搜集:根据当前位数,将每一个数字分配到相应的桶中,然后从桶中收集数字
  3. 重新排序:重复上述过程,直到所有位数都排序完成

下面列子,采用LSD:从最低位开始排序,逐步向上进行
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


基数排序的优缺点:

优点:

  1. 时间复杂度低:基数排序的时间复杂度为O(nk), 其中n是待排序元素的数量,k是最大数的位数。
  2. 稳定性:基数排序是稳定的排序算法,相同值的元素在排序后保持其原有的顺序。
  3. 适用于大规模数据:基数排序特别适合处理大规模整数排序,能够有效利用计算机的并行处理能力

缺点:

  1. 空间复杂度高:基数排序需要额外的空间来存储中间结果,空间复杂度为O(n + k)或O(n + r),其中r是桶的数量
  2. 适用范围有限:基数排序主要用于整数排序,对于浮点数或字符串等其它类型的数据,需要进行额外的转换或处理
  3. 位数限制:当待排序元素位数较多时,基数排序的效率会下降,因为需要进行更多的轮次分类

代码实现

// 基数排序,核心思想是通过逐位排序实现整体有序
// 使用到queue,[0, 9]个queue来排列每一位
void RadixSort(vector<int>& arr) {int size = arr.size();if (size == 0)return;// 找到最大值,确认最大位数int maxVal = arr[0];for (int i = 1; i < size; ++i) {if (maxVal < arr[i])maxVal = arr[i];}int maxDigits = to_string(maxVal).length();// 初始化10个队列vector<queue<int>> buckets(10);// 逐位排序for (int i = 0; i < maxDigits; ++i) {int divisor = pow(10, i);// 分配元素到桶中for (int j = 0; j < size; ++j) {int index = arr[j] / divisor % 10;	// 获取当前位数buckets[index].push(arr[j]);}// 从桶中收集元素int index = 0;for (int j = 0; j < 10; ++j) {while (!buckets[j].empty()) {arr[index++] = buckets[j].front();buckets[j].pop();}}}
}

总结

以上就是我总结的C++面试题,TCP和UDP方面(1)

在这里插入图片描述

相关文章:

数据结构:基数排序(c++实现)

个人主页 &#xff1a; 个人主页 个人专栏 &#xff1a; 《数据结构》 《C语言》《C》《Linux》《网络》 《redis学习笔记》 文章目录 基数排序的定义和基本原理基本原理具体步骤 基数排序的优缺点&#xff1a;代码实现总结 基数排序的定义和基本原理 基数排序(Radix Sort)是一…...

eNSP下载安装(eNsp、WinPcap、Wireshark、VirtualBox下载安装)

一、下载 下载网址&#xff1a;https://cloud.grbj.cn/softlink/eNSP%20V100R003C00SPC100%20Setup.exe 备用临时网址&#xff1a;https://linshi.grbj.cn/abdpana/softlink 二、准备工作 系统要求 关闭防火墙 三、安装 3.1安装WinPcap 基本都是下一步&#xff0c;双击&…...

【Linux系统】—— 冯诺依曼体系结构与操作系统初理解

【Linux系统】—— 冯诺依曼体系结构与操作系统初理解 1 冯诺依曼体系结构1.1 基本概念理解1.2 CPU只和内存打交道1.3 为什么冯诺依曼是这种结构1.4 理解数据流动 2 操作系统2.1 什么是操作系统2.2 设计OS的目的2.3 操作系统小知识点2.4 如何理解"管理"2.5 系统调用和…...

Linux 权限系统和软件安装(二):深入理解 Linux 权限系统

在 Linux 的世界里&#xff0c;权限系统犹如一位忠诚的卫士&#xff0c;严密守护着系统中的文件与目录&#xff0c;确保只有具备相应权限的用户才能进行操作。与其他一些操作系统不同&#xff0c;Linux 并不依据文件后缀名来标识文件的操作权限&#xff0c;而是构建了一套独特且…...

Windows 中的启动项如何打开?管理电脑启动程序的三种方法

在日常使用电脑时&#xff0c;我们经常会发现一些应用程序在开机时自动启动&#xff0c;这不仅会拖慢系统的启动速度&#xff0c;还可能占用不必要的系统资源。幸运的是&#xff0c;通过几个简单的步骤&#xff0c;你可以轻松管理这些开机自启的应用程序。接下来&#xff0c;我…...

uniapp邪门事件

很久之前在这篇《THREEJS 在 uni-app 中使用&#xff08;微信小程序&#xff09;》&#xff1a;THREEJS 在 uni-app 中使用&#xff08;微信小程序&#xff09;_uni-app_帶刺的小葡萄-华为开发者空间 中学到了如何在uniapp的微信小程序里接入three.js的3d模型 由于小程序自身很…...

DeepSeek学习教程 从入门到精通pdf下载:快速上手 DeepSeek

下载链接&#xff1a;DeepSeek从入门到精通(清华大学).pdf 链接: https://pan.baidu.com/s/1Ym0-_x9CrFHFld9UiOdA5A 提取码: 2ebc 一、DeepSeek 简介 DeepSeek 是一款由中国团队开发的高性能大语言模型&#xff0c;具备强大的推理能力和对中文的深刻理解。它广泛应用于智能办…...

MATLAB进阶之路:数据导入与处理

在MATLAB的学习旅程中,我们已经初步了解了它的基础操作。如今,我们将沿着这条充满惊喜的道路,迈向下一个重要的站点——数据导入与处理。这部分内容就像是为MATLAB注入了强大的能量,使其能够从现实的数据世界中汲取信息,然后像一位智慧的魔法师一样,巧妙地处理这些数据,…...

百度首页上线 DeepSeek 入口,免费使用

大家好&#xff0c;我是小悟。 百度首页正式上线了 DeepSeek 入口&#xff0c;这一重磅消息瞬间在技术圈掀起了惊涛骇浪&#xff0c;各大平台都被刷爆了屏。 百度这次可太给力了&#xff0c;PC 端开放仅 1 小时&#xff0c;就有超千万人涌入体验。这速度&#xff0c;简直比火…...

安全见闻

今天学了Windows操作系统和驱动程序的相关知识 Windows注册表 注册表是windows系统中具有层次结构的核心数据库 储存的数据对windows 和Windows上运行的应用程序和服务至关重要。注册表时帮助windows控制硬件、软件、用户环境和windows界面的一套数据文件。 打开注册表编辑器…...

PLC通讯

PPI通讯 是西门子公司专为s7-200系列plc开发的通讯协议。内置于s7-200 CPU中。PPI协议物理上基于RS-485口&#xff0c;通过屏蔽双绞线就可以实现PPI通讯。PPI协议是一种主-从协议。主站设备发送要求到从站设备&#xff0c;从站设备响应&#xff0c;从站不能主动发出信息。主站…...

Image Downloader下载文章图片的WordPress插件

源码介绍 一个用于下载图片的WordPress插件&#xff0c;包含下载统计功能&#xff0c;支持任何主题使用 用户点击下载后自动打包该文章所有原始图片&#xff0c;并把文章标题作为压缩包的文件名。 不占用服务器空间&#xff0c;也不占网盘空间&#xff0c;直接利用浏览器的性…...

乐享数科:供应链金融—三个不同阶段的融资模式

供应链金融是与产业链紧密结合的融资模式&#xff0c;它主要体现在订单采购、存货保管、销售回款这三个不同的业务阶段&#xff0c;并针对这些阶段提供了相应的金融服务。以下是这三个阶段中主要的融资模式及其特点&#xff1a; 供应链金融融资模式主要分为以下几种&#xff1…...

Jenkins 创建 Node 到 Windows

Jenkins 创建 Node 到 Windows 一. 新建 Node Dashboard -> Manage Jenkins -> Manage Nodes and Clouds Dashboard -> Nodes -> New Node 二. 配置节点 Node&#xff1a;节点名 Description&#xff1a;节点描述 Number of executors&#xff1a;节点最大同…...

halcon机器视觉深度学习对象检测,物体检测

目录 效果图操作步骤软件版本halcon参考代码本地函数 get_distinct_colors()本地函数 make_neighboring_colors_distinguishable() 效果图 操作步骤 首先要在Deep Learning Tool工具里面把图片打上标注文本&#xff0c; 然后训练模型&#xff0c;导出模型文件 这个是模型 mod…...

【分布式数据一致性算法】Gossip协议详解

在分布式系统中&#xff0c;多个节点同时提供服务时&#xff0c;数据一致性是核心挑战。在多个节点中&#xff0c;若其中一个节点的数据发生了修改&#xff0c;其他节点的数据都要进行同步。 一种比较简单粗暴的方法就是 集中式发散消息&#xff0c;简单来说就是一个主节点同时…...

蓝桥杯笔记——递归递推

递归 0. 函数的概念 我们从基础讲起&#xff0c;先了解函数的概念&#xff0c;然后逐步引入递归&#xff0c;帮助同学们更好地理解递归的思想和实现方式。 函数是程序设计中的一个基本概念&#xff0c;简单来说&#xff0c;它是一段封装好的代码&#xff0c;可以在程序中多次…...

Vue 3 + Vite 项目中配置代理解决开发环境中跨域请求问题

在 Vue 3 Vite 项目中&#xff0c;配置代理是解决开发环境中跨域请求问题的常见方法。通过在 Vite 的配置文件中设置代理&#xff0c;可以将前端请求转发到后端服务器&#xff0c;从而避免浏览器的同源策略限制。 1. 创建 Vue 3 Vite 项目 首先&#xff0c;确保你已经安装了…...

【复现DeepSeek-R1之Open R1实战】系列7:GRPO原理介绍、训练流程和源码深度解析

【复现DeepSeek-R1之Open R1实战】系列博文链接&#xff1a; 【复现DeepSeek-R1之Open R1实战】系列1&#xff1a;跑通SFT&#xff08;一步步操作&#xff0c;手把手教学&#xff09; 【复现DeepSeek-R1之Open R1实战】系列2&#xff1a;没有卡也能训模型&#xff01;Colab跑Op…...

【Qt】可爱的窗口关闭确认弹窗实现

文章目录 ​​​实现思路界面构建交互逻辑实现颜色渐变处理圆形部件绘制 代码在主窗口的构造函数中创建弹窗实例ExitConfirmDialog 类代码ColorCircleWidget 类代码 今天在Qt实现了这样一个可互动的窗口&#xff08;上图由于录屏工具限制没有录制到鼠标&#xff09; ​​​实现…...

服务器通过 ollama 运行deepseek r1

1、服务器环境简介 56核 CPU64G 内存无显卡已安装 Ollama 2、下载模型与配置 正常可以通过 ollama pull 或 ollama run 命令直接下载&#xff0c;但通常会遇到连接超时、找不到网址等总理。因此&#xff0c;可以使用国内的模型站进行下载&#xff0c;在这里使用魔塔查找模型…...

计算机毕业设计SpringBoot+Vue.jst网上购物商城系统(源码+LW文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

自制操作系统前置知识汇编学习

今天要做什么&#xff1f; 为了更好的理解书中内容&#xff0c;需要学习下进制分析和汇编。 汇编语言其实应该叫叫机器指令符号化语言&#xff0c;目前的汇编语言是学习操作系统的基础。 一&#xff1a;触发器 电路触发器的锁存命令默认是断开的&#xff0c;是控制电路触发器…...

Unity制作游戏——前期准备:Unity2023和VS2022下载和安装配置——附安装包

1.Unity2023的下载和安装配置 &#xff08;1&#xff09;Unity官网下载地址&#xff08;国际如果进不去&#xff0c;进国内的官网&#xff0c;下面以国内官网流程为例子&#xff09; unity中国官网&#xff1a;Unity中国官网 - 实时内容开发平台 | 3D、2D、VR & AR可视化 …...

深度学习(5)-卷积神经网络

我们将深入理解卷积神经网络的原理&#xff0c;以及它为什么在计算机视觉任务上如此成功。我们先来看一个简单的卷积神经网络示例&#xff0c;它用干对 MNIST数字进行分类。这个任务在第2章用密集连接网络做过&#xff0c;当时的测试精度约为 97.8%。虽然这个卷积神经网络很简单…...

LeetCodehot 力扣热题100 课程表

题目背景 这个问题要求我们判断是否可以完成所有课程的学习。每门课程可能依赖其他课程作为前置课程&#xff0c;构成了一个有向图。我们需要确定是否存在环&#xff0c;若存在环&#xff0c;说明课程之间互相依赖&#xff0c;无法完成所有课程&#xff1b;如果不存在环&#x…...

彻底卸载kubeadm安装的k8s集群

目录 一、删除资源 二、停止k8s服务 三、重置集群 四、卸载k8s安装包 五、清理残留文件和目录 六、删除k8s相关镜像 七、重启服务器 一、删除资源 # 删除集群中的所有资源&#xff0c;包括 Pod、Deployment、Service&#xff0c;任意节点执行 kubectl delete --all pod…...

【HarmonyOS Next】拒绝权限二次申请授权处理

【HarmonyOS Next】拒绝权限二次申请授权处理 一、问题背景&#xff1a; 在鸿蒙系统中&#xff0c;对于用户权限的申请&#xff0c;会有三种用户选择方式&#xff1a; 1.单次使用允许 2.使用应用期间&#xff08;长时&#xff09;允许 3.不允许 当用户选择不允许后&#xff0…...

便携式动平衡仪Qt应用层详细设计方案(基于Qt Widgets)

便携式动平衡仪Qt应用层详细设计方案&#xff08;基于Qt Widgets&#xff09; 版本&#xff1a;1.0 日期&#xff1a;2023年10月 一、系统概述 1.1 功能需求 开机流程&#xff1a;长按电源键启动&#xff0c;全屏显示商标动画&#xff08;快闪3~4次&#xff09;。主界面&…...

2 20 数据开发面试题汇总

下面是我在实习中协助面试 然后在牛客上挑选了一些完整的面试问题借助豆包完成的面经答案思路汇总 滴滴数据研发日常实习 一面 数据仓库认识维度建模之外还有哪些建模&#xff0c;有什么区别项目中数据仓库分了哪几层&#xff0c;为什么要分层Hadoop架构&#xff0c;你这些组…...