我通过根据单位数字和数十位等数字对数字进行排序来学习基数排序。 当最大位数为n时,列表在第n次传递后排序。 但它是否适用于单位数字列表?如果是,怎么样?
编辑: 按照这些步骤排序1 53 20 359 12。 通行证1: 筹码0-20 堆栈1-1 堆栈2-12 堆栈3-53 堆栈4- 堆栈5- 堆栈6- 堆栈7- 堆栈8- 堆栈9-359 20 1 12 53 359 通行证2: 筹码0-1 堆栈1-12 筹码2-20 堆栈3- 堆栈4- 筹码5-53 359 堆栈6- 堆栈7- 堆栈8- 堆栈9- 1 12 20 53 359 通过3: 它已经排序了。
但是这个列表怎么样呢? 7 3 2 5 3 1 0?
答案 0 :(得分:0)
假设以10为基数的十进制系统,并对每个数字从最低有效到最高进行排序,那么Radix Sort将首先对1列(10 ^ 0),10列(10 ^ 1),100列(10 ^)中的数字进行排序2),依此类推。
为更简洁地回答您的问题,如果每次通过时有10个存储桶(数组)要排序,那么单个数字将首先被排序。
因此,例如,如果将一个全位数的数组传递给Radix Sort:
[5, 8, 3, 2, 7, 1]
每个存储桶的结果输出如下所示:
[[], [ 1 ], [ 2 ], [ 3 ], [], [ 5 ], [], [ 7 ], [ 8 ], []]
在此遍之后(或在有更多数字的情况下,在每次后续遍之前)将要执行的操作是,使用.concat()之类的方法将数组按其在各自存储桶中的顺序展平。
因此,如果您在其中添加了两个两位数的数字:
[5, 8, 13, 2, 41, 1];
它看起来像这样:
[[], [41, 1], [2], [13], [], [5], [], [], [8], []] // first pass, 1's
[41, 1, 2, 13, 5, 8] // flattened; all single digits are sorted on this pass.
[[1, 2, 5, 8 ], [13], [], [], [41], [], [], [], [], []] // second pass, 10's
[1, 2, 5, 8, 13, 41] // flattened; array is now sorted and returned.
希望这会有所帮助。当我第一次解决这个问题时,我也想知道同样的事情。