基数排序思想:先将序列按照个位装入十个组,然后从0到9将各组内数拿出来,按照十位装入是个组,最后以同样的方式按照百位装入,完成操作之后就已经排好序了。
排序图解:
排序代码:
代码设计:
首先将判断所有数字都是多少位,必须将高位为空补零,存为字符串,或者直接通过整数位数求余取整获得数据。
然后使用循环从个位到最高位遍历所有数,分组。
设置分组,每一个分组必须是一个动态数组。
每一次取数,需要按照上一次装入的组从0组开始,取出一个数就装到对应的本次分组的组。
取出的时候,每取空一个组就需要到下一个组取数,因此取数的时候要判断边界。
如果减少代码的复杂度可以每次将组里面的数取出装入原来的数组,再做和第一次取数一样的循环。
时间复杂度:O(d*n)可以简单的看成是O(n)
空间复杂度:动态数组的话空间会少一点,需要2n,如果是十个数组的话,就需要11*n。