基数排序算法

基数排序算法基数排序 区别与其他排序算法

这里看看

基数排序 – 码到城攻基数排序基数排序算法https://www.codecomeon.com/posts/20/

说基数排序,其实就是多次的桶排,不过,这里只需要十个桶,基数排序基于多关键字,拿一个数256来说,它被分为各位,十位,百位,每位都是一个关键字,而且关键字的范围都

是在0-9的范围内;

先以个位数的值进行装桶,即个位数为1则放入1号桶,为9则放入9号桶,暂时忽视十位数,和百位数;

以下是一个待排序数列:278-》109-》063-》930-》589-》184-》505-》269-》008-》083-》

1.按个位关键字排序,如图:

基数排序算法

最后一行就是按个位桶排的序列。

2.按十位关键字排序,(一定是在1排序的序列基础上再按十位排序,目的是:如果十位相同,由于个位排好序,所以再入桶的时候,还是有序的),如图:

基数排序算法

结果:

基数排序算法

3.百位排序:排序序列基于2中排好的序列;

基数排序算法

最终排序结果就出来了,下面用代码说话:

/* *基数排序 */ #pragma once #define MAXSIZE 1000 int getdigit(int x, int d) { int a[] = { 1, 1, 10, 100}; //最大三位数,所以这里只要百位就满足了。 return (x / a[d]) % 10; } //打印 void PrintArr(int ar[], int n) { for (int i = 0; i < n; ++i) { cout << ar[i] << " "; } cout << endl; } void lsdradix_sort(int arr[], int begin, int end, int d) { const int radix = 10; int count[radix], i, j; int *bucket = (int*)malloc((end - begin + 1)*sizeof(int)); //所有桶的空间开辟 //按照分配标准依次进行排序过程 for (int k = 1; k <= d; ++k) { //置空 for (i = 0; i < radix; i++) { count[i] = 0; } //统计各个桶中所盛数据个数 for (i = begin; i <= end; i++) { count[getdigit(arr[i], k)]++; } //count[i]表示第i个桶的右边界索引 for (i = 1; i < radix; i++) { count[i] = count[i] + count[i - 1]; } //把数据依次装入桶(注意装入时候的分配技巧) for (i = end; i >= begin; --i) //这里要从右向左扫描,保证排序稳定性 { j = getdigit(arr[i], k); //求出关键码的第k位的数字, 例如:576的第3位是5 bucket[count[j] - 1] = arr[i]; //放入对应的桶中,count[j]-1是第j个桶的右边界索引 --count[j]; //对应桶的装入数据索引减一 } //注意:此时count[i]为第i个桶左边界 //从各个桶中收集数据 for (i = begin, j = 0; i <= end; ++i, ++j) { arr[i] = bucket[j]; } } free(bucket); } void main() { int br[10] = { 278, 109, 63, 930, 589, 184, 505, 269, 8, 83 }; cout << "原数据如下:" << endl; PrintArr(br, 10); lsdradix_sort(br, 0, 9, 3); //3位数 cout << "排序后数据如下:" << endl; PrintArr(br, 10); }

赐教!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/229362.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午4:53
下一篇 2026年3月16日 下午4:53


相关推荐

  • 百度地图API开发

    百度地图API开发1,申请密钥:自己的秘钥2,初始化头文件3,创建一个盛放地图的div:4,初始化地图:5,丰富地图功能:*添加地图控件:map2.addControl(newBMap.Navigatio

    2022年7月1日
    33
  • js取整数四舍五入「建议收藏」

    js取整数四舍五入「建议收藏」1.丢弃小数部分,保留整数部分parseInt(5/2)2.向上取整,有小数就整数部分加1 Math.ceil(5/2)3,四舍五入.Math.round(5/2)4,向下取整 Math.floor(5/2)Math对象的方法FF:Firefox,N:Netscape,IE:InternetExplorer方法描述FF

    2022年6月18日
    44
  • 大数加法运算 c语言_大数加法运算

    大数加法运算 c语言_大数加法运算前言:本篇博客将分为4到5篇来和大家一块讨论大数的加减乘除,然后再将运算做成一个大数运算库。其中除法较为棘手,但如果作完前三个运算后就没有什么难度了。虽然大多主流的编程语言如java,c++,都有大数运算库,可是c语言标准库并没有提供的大数运算,网上的c语言大数运算大多散而不周或过于复杂,所以本人决定写博客做一些简单的介绍,由于本人水平有限,如有错误或者bug请大家批评指正我会第一时间更正。开发

    2022年10月7日
    9
  • COM口(DB9) 连 RJ45 线序

    COM口(DB9) 连 RJ45 线序设备 1 标准 100M 以太网线一根 线序为 568B 2 串口 DB9 到 RJ45 的转接头是目前常用的转接头 广泛用于路由器 交换机网络设备的串口管理 高 端服务器串口到 Console 服务器的连接 需要的备件 DB9 转 RJ45 转换器 1 个 如下图所示 一头买来时连接到 RJ45 口 另一头为 COM 口母头 9 针 线序如

    2026年3月26日
    6
  • 小白必看:如何无损将MBR转换成GPT磁盘?硬盘扩容提速指南

    小白必看:如何无损将MBR转换成GPT磁盘?硬盘扩容提速指南

    2026年3月16日
    2
  • ipynb pycharm 运行_在pychar中写入ipynb文件,PyCharm,编写

    ipynb pycharm 运行_在pychar中写入ipynb文件,PyCharm,编写背景我的 Pycharm 下面有很多 Project 每个 Project 一个 Anaconda 环境 昨天新开了一个 Project 叫 CLRS Code Anaconda 环境名也叫 CLRS Code 然后我之前没有在 Pycharm 里面用过 Jupyter 突然想试试这个功能 然后就新建一个 ipynb 文件 Pycharm 提示我没有装 JupyterPacka 然后我就在 Pycharm 里面装了 装完之后 搜索

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号