首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基数排序如何对一位数列表进行排序?

基数排序如何对一位数列表进行排序?
EN

Stack Overflow用户
提问于 2016-05-04 21:40:32
回答 1查看 193关注 0票数 1

我学习了基数排序的工作原理,按照单位位数的数字排序,然后是十位数,以此类推。当最大位数为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?

EN

回答 1

Stack Overflow用户

发布于 2020-12-18 07:58:32

假设十进制为基数,并从最低有效位到最高有效位对每个数字进行排序,基数排序将首先对1的列(10^0)、10的列(10^1)、100的列(10^2)中的数字进行排序,依此类推。

为了更简洁地回答您的问题,如果您在每次传递中有10个要排序的存储桶(数组),那么将首先对单个数字进行排序。

因此,例如,如果将一个包含所有单个数字的数组传递给基数排序:

代码语言:javascript
运行
复制
[5, 8, 3, 2, 7, 1]

每个存储桶的结果输出如下所示:

代码语言:javascript
运行
复制
[[], [ 1 ], [ 2 ], [ 3 ], [], [ 5 ], [], [ 7 ], [ 8 ], []]

在这次传递之后(或者在每个后续传递之前,如果有更多的数字),数组将按照它们在各自存储桶中的顺序被展平,使用像.concat()这样的方法。

因此,如果您在其中添加了两个两位数字:

代码语言:javascript
运行
复制
[5, 8, 13, 2, 41, 1];

它看起来像这样:

代码语言:javascript
运行
复制
[[], [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.

希望这能有所帮助。当我第一次解决这个问题时,我也想知道同样的事情。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37029575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档