试图掌握将数字从0到99999排序的算法的概念

时间:2016-12-20 19:32:17

标签: java arrays algorithm sorting recursion

我正在尝试理解需要像这样工作的排序算法:

给定一个任意数组,填充0到99999之间的数字,我需要编写一个算法来对这些数字进行排序,从最小数字开始到最大数字结束。该算法应该像这样工作:每个数字应该分别在数组0到9的数组中的十个数组中的一个中接收某个位置。(我们给出了简单地使用二维矩阵的提示)。例如,数字51525应该位于数组5中,而数字0中的数字5673应该被定义为05673.这个矩阵将是第一个方法的一部分,这与我们实际想要的方法相同排序数字。此外,我们需要第二种方法,我认为它接收一个预先放入数字的一维数组。此方法现在应该生成一个扩展的数组并将传输的数组(意味着转移的1x1数组中的数字)复制到其中。所以,我们现在有一个包含两个元素的数组,一个是之前的数字。现在返回这个新数组,虽然我不知道如何。我们也需要处理递归。

我的尝试以某种方式起作用:

我们给排序方法一个数组,使用switch-case-construct,将每个数字除以10000并将它们相对于余数定位(case 0,case 1,...)。当然,这里出现的问题是我们可能面临的情况是我们会在同一个字段上复制两个数字,这会覆盖第一个数字。所以解决方案可能在第二种方法中,我们采用这样的1x1数组填充数字,扩展它并再次将它返回到排序方法。现在,它可以再次填充数组,并且还有另一个数字需要定位在这个确切的字段上,我们可以再次扩展数组。那将是我的递归。递归ancor可能看起来像这样:“如果字段不包含数字或只包含一个数字,......”。

我现在不能直截了当地实现这个想法。例如,如果我将扩展1x1数组以便用另一个数字填充它并返回它,那么排序方法应该如何使用呢?我的意思是,它不像我可以把它坚持到前一个矩阵。

我不是在这里要求代码,只是想知道是否有人熟悉这种排序算法,如果有人能给我一个正确的方向推动我需要去。

1 个答案:

答案 0 :(得分:2)

您假设每个数组都有整数作为其元素。我熟悉的可比方法与列表数组一起使用:将所有以5开头的数字放入数组的元素5中。

递归步骤将此传递给一个方法,该方法对第二个数字进行排序,然后在第三个数字上进行排序,依此类推。 (请注意,此方法可以与顶部方法相同。)每次传递都会使列表变小,直到对最后一位数字进行排序为每个数组元素提供一个元素。

现在,您可以恢复调用堆栈。在每个级别,您只需按从0到9的顺序追加数组元素,从而得到大约是前一级别大小10倍的列表。

这是否足以让你感动?