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

【算法】基数排序

简介

基数排序(*Radix sort)是一种非比较排序算法(non-comparative sorting algorithm)。现代计算机的基数排序算法由 计数排序 算法的开发人哈罗德·H·西华德(Harold H. Seward)于1954年于麻省理工大学开发。

算法步骤

  1. 将待排序序列中的所有数视为同样的数位长度。
  2. 从最低位开始,依次按位进行一次计数排序
  3. 从最低位排序一直到最高位排序完成以后,数列就变成一个有序序列。

计数排序可参考之前发布的【算法】计数排序。

因为要计算负数,因此计数用的 数组 如下:

0123456789101112131415161718
-9-8-7-6-5-4-3-2-10123456789
  • [0 ~ 8] 用来表示负数 -9-1
  • [9] 用于表示 0
  • [10 ~ 18] 用来表示整数 19

举例有未排列序列如下:

2633-5-215

从个位数开始排序:

2[6]3[3]-[5]-1[2]1[5]
63-5-25

计数数列则为:

0123456789101112131415161718
11111

个位数排序为:

-12-5331526

从十位数开始排序:

-[1]2-[0]5[3]3[1]5[2]6
-10312

计数序列为:

0123456789101112131415161718
11111

十位数排序为:

-12-5152633

完成排序

C语言实现

// 获取序列中最大位数
unsigned _maxSizeOfItem(const int *array, const unsigned length) {int max = array[0];unsigned index = 1;unsigned number_1 = 0;unsigned number_2 = 0;while (index < length) {number_2 = array[index];if (max < 0) {number_1 = max * -1;} else {number_1 = max;}if (number_2 < 0) {number_2 *= -1;}if (number_2 > number_1) {max = array[index];}index += 1;}unsigned count = 0;while (max != 0) {max /= 10;count += 1;}return count;
}
// 复制数组。
void _copyArray(int *from_arr, int *to_arr, const unsigned length) {for (unsigned index = 0; index < length; index++) {to_arr[index] = from_arr[index];}
}
// 按位获取某个数对应的计数序列的索引值。
unsigned _getDigitByPlace(int num, const int place) {num /= place;num = num - num / 10 * 10;return num + 9;
}
void radixSort(int *array, const unsigned length) {unsigned radixs[RADIXS_SIZE] = {0}; /* initialize array with 0. */unsigned radix = 0;int *tmp_array = calloc(length, sizeof(int));unsigned index = 0;unsigned size = _maxSizeOfItem(array, length);int place = 1;for (unsigned count = 0; count < size; count++) {// 按位开始计数排序。for (index = 0; index < length; index++) {radix = _getDigitByPlace(array[index], place);radixs[radix] += 1;}for (index = 1; index < RADIXS_SIZE; index++) {radixs[index] = radixs[index] + radixs[index - 1];}for (index = 0; index < length; index++) {radix = _getDigitByPlace(array[length - index - 1], place);radixs[radix] -= 1;tmp_array[radixs[radix]] = array[length - index - 1];}// 将完成计数排序后的序列 复制回原数组。_copyArray(tmp_array, array, length);// 重置计数序列。for (index = 0; index < RADIXS_SIZE; index++) {radixs[index] = 0;}// 下一个位。place *= 10;}free(tmp_array);
}

相关文章:

【算法】基数排序

简介 基数排序&#xff08;*Radix sort&#xff09;是一种非比较排序算法&#xff08;non-comparative sorting algorithm&#xff09;。现代计算机的基数排序算法由 计数排序 算法的开发人哈罗德H西华德&#xff08;Harold H. Seward&#xff09;于1954年于麻省理工大学开发。…...

2核2G服务器优惠价格轻量61元一年,CVM价格313元15个月

腾讯云2核2G服务器多少钱一年&#xff1f;轻量服务器61元一年&#xff0c;CVM 2核2G S5服务器313.2元15个月&#xff0c;轻量2核2G3M带宽、40系统盘&#xff0c;云服务器CVM S5实例是2核2G、50G系统盘。腾讯云2核2G服务器优惠活动 txybk.com/go/txy 链接打开如下图&#xff1a;…...

不同Python版本和wxPython版本用pyinstaller打包文件大小对比

1、确定wxPython和Python版本的对应关系 在这里可以找到Python支持的所有wxPython版本&#xff1a;https://pypi.tuna.tsinghua.edu.cn/simple/wxpython/ 由于Python从3.6版本开始支持f字符串、从3.9版本开始不支持Windows7操作系统&#xff0c;所以我仅筛选3.6-3.8之间的版本…...

【C语言】结构体详解(一)

目录 1、什么是结构体? 2、结构体成分 3、结构体变量的定义与初始化 3.1、结构体变量的三种定义方式 3.2、结构体变量的初始化 4、结构体成员的访问&#xff08;两种方式&#xff09; 4.1、直接访问 4.2、间接访问 5、结构的特殊声明 5.1、不完全声明&#xff08;匿…...

AI时代-普通人的AI绘画工具对比(Midjouney与Stable Diffusion)

AI时代-普通人的AI绘画工具对比&#xff08;Midjouney与Stable Diffusion&#xff09; 前言1、基础对比Stable Diffusion&#xff08;SD&#xff09;SD界面安装与使用SD Midjouney&#xff08;MJ&#xff09; 2、硬件与运行要求对比Stable Diffusion硬件要求内存硬盘显卡 Midjo…...

【蓝桥杯】矩阵快速幂

一.快速幂概述 1.引例 1&#xff09;题目描述&#xff1a; 求A^B的最后三位数表示的整数&#xff0c;A^B表示&#xff1a;A的B次方。 2&#xff09;思路&#xff1a; 一般的思路是&#xff1a;求出A的B次幂&#xff0c;再取结果的最后三位数。但是由于计算机能够表示的数字…...

C语言使用STM32开发板手搓高端家居洗衣机

目录 概要 成品效果 背景概述 1.开发环境 2.主要传感器。 技术细节 1. 用户如何知道选择了何种功能 2.启动后如何进行洗衣 3.如何将洗衣机状态上传至服务器并通过APP查看 4.洗衣过程、可燃气检测、OLED屏显示、服务器通信如何并发进行 小结 概要 本文章主要是讲解如…...

【Hello,PyQt】QTextEdit和QSplider

PyQt5 是一个强大的Python库&#xff0c;用于创建图形用户界面&#xff08;GUI&#xff09;。其中&#xff0c;QTextEdit 控件作为一个灵活多用的组件&#xff0c;常用于显示和编辑多行文本内容&#xff0c;支持丰富的格式设置和文本操作功能。另外&#xff0c;QSlider 控件是一…...

【力扣】191.位 1 的个数、485.最大连续 1 的个数

191.位 1 的个数 题目描述 编写一个函数&#xff0c;输入是一个无符号整数&#xff08;以二进制串的形式&#xff09;&#xff0c;返回其二进制表达式中 设置位 的个数&#xff08;也被称为汉明重量&#xff09;。 示例 1&#xff1a; 输入&#xff1a;n 11 输出&#xff1…...

蓝桥杯 java 承压计算

题目: 思路&#xff1a; 1&#xff1a;其中的数字代表金属块的重量(计量单位较大) 说明每个数字后面不一定有多少个0 2&#xff1a;假设每块原料的重量都十分精确地平均落在下方的两个金属块上&#xff0c;最后&#xff0c;所有的金属块的重量都严格精确地平分落在最底层的电子…...

leetcode268-Missing Number

这道题目要求缺失的数字&#xff0c;一般解决数组的问题&#xff0c;要么往排序数组&#xff0c;要么往双指针遍历这些方向上靠&#xff0c;要么往异或方向上靠&#xff0c;总之落点无非就只有这几个。我们要求缺失的数字&#xff0c;可以依次让1&#xff5e;n和数组元素进行异…...

【jenkins+cmake+svn管理c++项目】jenkins回传文件到svn(windows)

书接上文&#xff1a;创建一个项目 在经过cmakemsbuild顺利生成动态库之后&#xff0c;考虑到我一个项目可能会生成多个动态库&#xff0c;它们分散在build内的不同文件夹&#xff0c;我希望能将它们收拢到一个文件夹下&#xff0c;并将其回传到svn。 一、动态库移位—cmake实…...

数据结构·二叉树(2)

目录 1 堆的概念 2 堆的实现 2.1 堆的初始化和销毁 2.2 获取堆顶数据和堆的判空 2.3 堆的向上调整算法 2.4 堆的向下调整算法 2.4 堆的插入 2.5 删除堆顶数据 2.6 建堆 3 建堆的时间复杂度 3.1 向上建堆的时间复杂度 3.2向下建堆的时间复杂度 4 堆的排序 前言&…...

MATLAB算法实战应用案例精讲-【毕业季论文专用】人工智能视觉检测技术及其在实际应用中的挑战与前景

目录 摘要: 第一章:引言 1.1 研究背景 1.2 研究目的与意义...

Linux虚拟机环境搭建spark

Linux环境搭建Spark分为两个版本&#xff0c;分别是Scala版本和Python版本。 一、 安装Pyspark 本环境以 Python 环境为例。 1、下载spark 下载网址&#xff1a;https://archive.apache.org/dist/spark 下载安装包&#xff1a;根据自己环境选择合适版本&#xff0c;本环境…...

STL的string容器

string基本概念 string是C风格的字符串&#xff0c;本质上是一个类。 string 和 char* 的区别 char* 是一个指针&#xff1b; string是一个类&#xff0c;内部封装了 char* &#xff0c;用来管理字符串&#xff0c;是一个 char* 型的容器。 特点 string内部封装了很多成员…...

半导体工艺技术

完整内容点击&#xff1a;【半导体工艺技术】...

acwing算法提高之图论--单源最短路的扩展应用

目录 1 介绍2 训练 1 介绍 本专题用来记录使用。。。。 2 训练 题目1&#xff1a;1137选择最佳线路 C代码如下&#xff0c; #include <iostream> #include <cstring> #include <algorithm> #include <queue>using namespace std;const int N 101…...

SQLServer数据库使用Function实现根据字段内容的拼音首字母进行数据查询

实现SQL首字母查询分两步&#xff0c;第一步建Function&#xff0c;第二步引用新建的Function。 1. 首先需要自定义一个查询的Function&#xff0c;详细SQL如下&#xff1a; ALTER function [dbo].[GetDataByPY](str nvarchar(4000)) returns nvarchar(4000) as begin decla…...

Linux——信号概念与信号产生方式

目录 一、概念 二、前台进程与后台进程 1.ctrlc 2.ctrlz 三、信号的产生方式 1.键盘输入产生信号 2.系统调用发送信号 2.1 kill()函数 2.2 raise()函数 2.3 abort()函数 3.异常导致信号产生 3.1 除0异常 3.2 段错误异常 4.软件条件产生信号 4.1 管道 4.2 闹钟…...

赋值语句还能当判断条件?涨芝士了!

赋值和条件看似是C语言中毫不相关的两个概念&#xff0c;虽然实际过程中我猜测不会有太多这种不太符合常理的情况出现&#xff0c;但是现在在学习的过程中&#xff0c;为了出题而出题总是会整出一些花活出来.....这很难不让人联想起高中时一些大佬为了彰显自己的数学天赋而自己…...

数据结构 - 算法效率|时间复杂度|空间复杂度

目录 1.算法效率 2.时间复杂度 2.1定义 2.2大O渐近表示法 2.3常见时间复杂度计算举例 3.空间复杂度 3.1定义 3.2常见空间复杂度计算举例 1.算法效率 算法的效率常用算法复杂度来衡量&#xff0c;算法复杂度描述了算法在输入数据规模变化时&#xff0c;其运行时间和空间…...

接口自动化之 + Jenkins + Allure报告生成 + 企微消息通知推送

接口自动化之 Jenkins Allure报告生成 企微消息通知推送 在jenkins上部署好项目&#xff0c;构建成功后&#xff0c;希望可以把生成的报告&#xff0c;以及结果统计发送至企微。 效果图&#xff1a; 实现如下。 1、生成allure报告 a. 首先在Jenkins插件管理中&#x…...

『Apisix安全篇』探索Apache APISIX身份认证插件:从基础到实战

&#x1f680;『Apisix系列文章』探索新一代微服务体系下的API管理新范式与最佳实践 【点击此跳转】 &#x1f4e3;读完这篇文章里你能收获到 &#x1f6e0;️ 了解APISIX身份认证的重要性和基本概念&#xff0c;以及如何在微服务架构中实施API安全。&#x1f511; 学习如何使…...

【01-20】计算机网络基础知识(非常详细)从零基础入门到精通,看完这一篇就够了

【01-20】计算机网络基础知识&#xff08;非常详细&#xff09;从零基础入门到精通&#xff0c;看完这一篇就够了 以下是本文参考的资料 欢迎大家查收原版 本版本仅作个人笔记使用1、OSI 的七层模型分别是&#xff1f;各自的功能是什么&#xff1f;2、说一下一次完整的HTTP请求…...

『大模型笔记』常见的分布式并行策略(分布式训练)

常见的分布式并行策略(分布式训练) 文章目录 一. 为什么分布式训练越来越流行二. 常见的并行策略2.1 数据并行2.2 模型并行2.3 流水并行2.4 混合并行二. 参考文献一. 为什么分布式训练越来越流行 近年来,深度学习被广泛应用到各个领域,包括计算机视觉、语言理解、语音识别、广…...

java 企业工程管理系统软件源码+Spring Cloud + Spring Boot +二次开发+ 可定制化

工程项目管理软件是现代项目管理中不可或缺的工具&#xff0c;它能够帮助项目团队更高效地组织和协调工作。本文将介绍一款功能强大的工程项目管理软件&#xff0c;该软件采用先进的Vue、Uniapp、Layui等技术框架&#xff0c;涵盖了项目策划决策、规划设计、施工建设到竣工交付…...

3D数据格式导出工具HOOPS Publish如何生成高质量3D PDF?

在当今数字化时代&#xff0c;从建筑设计到制造业&#xff0c;从医学领域到电子游戏开发&#xff0c;3D技术已经成为了不可或缺的一部分。在这个进程中&#xff0c;将3D模型导出为3D PDF格式具有重要的意义。同时&#xff0c;HOOPS Publish作为一个领先的解决方案&#xff0c;为…...

【springboot】闲话 springboot 的几种异步机制 及 长轮询的概念和简单实现

文章目录 引子springboot的几种异步形式开启异步支持和线程池配置&#xff08;重要&#xff09;第一种&#xff1a;Async第二种&#xff1a;Callable<T>第三种&#xff1a;WebAsyncTask<T>第四种&#xff1a;DeferredResult<T> 长轮询的简单实现概念实现服务…...

Mysql---安全值守常用语句

文章目录 目录 文章目录 一.用户权限设置 用户设置 元数据查询 Union联合查询 分组查询 字符串函数 总结 一.用户权限设置 用户设置 #用户创建 create user "用户名""%主机名" identified by "密码" #用户删除 drop user 用户名 #用户查询…...

建材公司网站建设方案/网址大全

目录 [隐藏] 1 环境与软件2 第一步&#xff1a;安装MinGW3 第二步&#xff1a;配置编译环境4 第三步&#xff1a;配置SDL5 第四步&#xff1a;编译 5.1 编译faac5.2 编译fdk-aac5.3 编译x2645.4 配置ffmpeg 6 第五步&#xff1a;利用eclipse编译ffmpeg7 第六步&#xff1a;调试…...

批批发发网网站站建建设设/市场调研报告模板范文

何凯明&#xff08;Kaiming He&#xff09;是 ResNet 作者之一、Facebook AI 实验室研究科学家。最近&#xff0c;他的最新研究成果Mask R-CNN公布&#xff0c;这是一个概念上简单&#xff0c;灵活&#xff0c;而且通用的对象实例分割框架&#xff0c;在 COCO 的实例分割&#…...

江苏建设委员网站建筑焊工查询/网站地址ip域名查询

H.264是一种广泛使用的视频压缩标准&#xff0c;它利用先进的算法和技术&#xff0c;可以将高清视频压缩到相对较小的文件大小&#xff0c;而且不会影响视频的质量。在H.264中&#xff0c;编码profile和level是非常重要的概念&#xff0c;本文将会对它们进行详细分析。 一、H.2…...

.net可以做网站做游戏 博客园/seo教程排名第一

.NET Framework 2.0 大大增强了 Application 的功能&#xff0c;使得编写 WinForm程序更加容易。只是和 Environment 一样&#xff0c;Application长期被忽视。 产品信息 CompanyName&#xff1a;获取与该应用程序关联的公司名称。 ProductName&#xff1a;获取与该应用程序…...

深圳横岗网站建设/seowhy论坛

很久以来&#xff0c;我一直都有这样两个困惑&#xff1a; 统计专业学习编程应该系统学习还是遇到问题再找答案&#xff1f;要不要写博客&#xff1f;写博客对自己的编程水平有多大提升&#xff1f;把自己的技术全部分享出去是不是会被超越&#xff1f; 最近我才把这两个问题彻…...

网页模版素材下载/seo网址优化靠谱

点击上面蓝色小字或微信搜索【幼儿教案】关注公众号每天免费8篇优质教案幼儿园中班语言活动教案&#xff1a;十二生肖设计意图在几千年的中国传统文化中&#xff0c;生肖不仅是一种形象生动的纪年、纪月的方法&#xff0c;更已与每个人结合起来&#xff0c;赋予了一种神奇的性格…...