桶排序、基数排序

桶排序、基数排序,第1张

桶排序、基数排序 13、桶排序

14、基数排序

找数组中最大的元素看他是几位数,然后对其它元素在前面补0成最大元素的相同位数

然后准备桶,先根据各位数字来,看数字是啥就对应几号桶,然后将桶里的元素从左到右导出来,然后根据十位数的数字来,看数值是啥就对应几个号桶,然后将桶中的元素从左到右导出来,然后再根据百位数进行,最后导出来就是排好序的数组元素。

优化:

先用一个count的数组放元素的个位数有几个。比如013的个位数是3,所以在3的位置标1;021的个位数是1所以在1的位置标1,011的个位数是1,所以在1的位置标1,因为之前有一个1了,所以加起来就是2,052的个位数是2,所以在2的位置标1;062的个位数是2,所以在2的位置标1,因为之前有一个1了所以加起来就是2;其实count中就是存放中数组中元素的个位数的数值有几个相等的。比如在2位置上的有多少个是等于2的,就有2。

然后再将前面一个和自己的相加得到自己位置的数值,所以count相当于存的是小于等于个位数数值的元素有多少个。比如当位置在2的时候,之前是表示个位数是2的有2个,现在表示的是各位是小于等于2的有4个。

然后数组中的元素从右往左开始遍历,用一个help数组来放数组中的元素;比如062,个位数是2,所以看上面的count数组,2的位置对于的有4个数值,所以他应该放在4-1=3的位置上,2位置的4也改成3,继续看052;个位数是2,所以看到2位置上的是3,所以放在3-1=2的位置上,而且2位置的3-1=2;

注意:为什么要从右边开始到左边,是因为要先入桶的先出桶;

代码如下:

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5609458.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存