博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
经典排序算法 - 基数排序Radix sort
阅读量:6968 次
发布时间:2019-06-27

本文共 2082 字,大约阅读时间需要 6 分钟。

经典排序算法 - 基数排序Radix sort

原理类似桶排序,这里总是需要10个桶,多次使用

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

例如

待排序数组[62,14,59,88,16]简单点五个数字

分配10个桶,桶编号为0-9,以个位数数字为桶编号依次入桶,变成下边这样

|  0  |  0  | 62 |  0  | 14 |  0  | 16 |  0  |  88 | 59 |

|  0  |  1  |  2  |  3  |  4 |  5  |  6  |  7  |  8  |  9  |桶编号

将桶里的数字顺序取出来,

输出结果:[62,14,16,88,59]

再次入桶,不过这次以十位数的数字为准,进入相应的桶,变成下边这样:

由于前边做了个位数的排序,所以当十位数相等时,个位数字是由小到大的顺序入桶的,就是说,入完桶还是有序

|  0  | 14,16 |  0  |  0  |  0  | 59 | 62  | 0  | 88  |  0  |

|  0  |  1      |  2  |  3  |  4  |  5  |  6  |  7  |  8  |  9  |桶编号

因为没有大过100的数字,没有百位数,所以到这排序完毕,顺序取出即可

最后输出结果:[14,16,59,62,88]

代码仅供参考

///         /// 基数排序        /// 约定:待排数字中没有0,如果某桶内数字为0则表示该桶未被使用,输出时跳过即可///         /// 待排数组        /// 桶数组第一维长度        /// 桶数组第二维长度        static void radix_sort(int[] unsorted, int array_x = 10, int array_y = 100)        {            for (int i = 0; i < array_x/* 最大数字不超过999999999...(array_x个9) */; i++)            {                int[,] bucket = new int[array_x, array_y];                foreach (var item in unsorted)                {                    int temp = (item / (int)Math.Pow(10, i)) % 10;                    for (int l = 0; l < array_y; l++)                    {                        if (bucket[temp, l] == 0)                        {                            bucket[temp, l] = item;                            break;                        }                    }                }                for (int o = 0, x = 0; x < array_x; x++)                {                    for (int y = 0; y < array_y; y++)                    {                        if (bucket[x, y] == 0) continue;                        unsorted[o++] = bucket[x, y];                    }                }            }        }        static void Main(string[] args)        {            int[] x = { 999999999, 65, 24, 47, 13, 50, 92, 88, 66, 33, 22445, 10001, 624159, 624158, 624155501 };            radix_sort(x);            foreach (var item in x)            {                if (item > 0)                    Console.WriteLine(item + ",");            }            Console.ReadLine();        }

 

转载于:https://www.cnblogs.com/kkun/archive/2011/11/23/radix_sort.html

你可能感兴趣的文章
IBM携手三菱东京日联银行 将区块链用于合同管理
查看>>
Mac 10.12安装WebStorm
查看>>
Spring Cloud启动应用时指定IP或忽略某张网卡配置
查看>>
Jenkins配置MSBuild实现自动部署2(项目实践)
查看>>
kafka好文章
查看>>
IBM发布超强量子计算机,可处理50个量子位
查看>>
如何使用Bro IDS和Intel Critical Stack分析网络活动
查看>>
Memcached的Web管理工具MemAdmin(待实践)
查看>>
嵌入式学习难点 嵌入式软件学习
查看>>
11204 ASM 在线存储迁移。
查看>>
eclipse不会自动编译的问题解决
查看>>
linux netstat命令
查看>>
淘宝卖家遭恶退诈骗 阿里一年来协助警方抓获103人
查看>>
拥2180亿美元收入,苹果成全球最大IT企业
查看>>
数据库连接池的工作原理
查看>>
网络抓包工具wireshark and tcpdump 及其实现基于的libpcap
查看>>
市值410亿美元!VR内容在5年后将成下一座金矿
查看>>
easyui的combobox根据后台数据实现自动输入提示功能
查看>>
ASP.NET MVC WEB API必知必会知识点总结
查看>>
Test2 unit6
查看>>