找数组中最大的元素看他是几位数,然后对其它元素在前面补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;
注意:为什么要从右边开始到左边,是因为要先入桶的先出桶;
代码如下:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)