欢迎。我有一个使用数组通过的基数排序方法,但必须有另一个存储在空队列中的数组(bin)。我很困惑如何为垃圾箱排队。我还有一个findPlace方法,可以在调用时找到每个数字的位置。所以,这就是我得到的。有人能帮助我找到我所缺少的东西吗?非常感谢你的时间。
public static void radix(int [] list){
int [] bin = new int[10];
ArrayQueue<Integer> part = new ArrayQueue<Integer>(); // EDIT What would I do with this queue??
int num = 0;
for(int i=0;i<list.length;i++)
{
bin[i] = 0;
}
for(int pass=0;pass<list.length;pass++)
{
for(int num=0;num<list.length;num++)
{
int digit=findPlace(bin[pass], num);
}
bin[digit].add(list[num]); // add to the bin
}
// Put back into list
for(int h=0; h<10; h++)
{
while(!bin[h].isEmpty())
{
list[num] = bin[queueNum].remove();
num++;
}
}
}
public static int getPlace (int x, int place)
{return x/place % 10;}
我也找到了一个找到存储桶的方法,所以我只需要知道如何将它放入数组中,我会这样做吗? part.add(getPlace(x,place));?
答案 0 :(得分:3)
你的数组bin
只是因为你想要它而不像一个队列:)数组没有像add()
和remove()
这样的方法。您有两种选择来解决这个问题:
自行编排正确的队列处理:队列由一个数组和两个指向该数组的指针组成,传统上称为head
和tail
。您必须编写自己的方法来添加和删除,这将适用于数组和指针,并处理空队列或溢出的队列。
使用Java的内置Queue类。它在图书馆的Javadocs中有记录。但是,不知道你的作业是否打算让你建立自己的队列。
更新并提供其他详细信息:
您询问了如何从数字中提取单个数字。根据维基百科文章中的建议,最简单的数字(LSD)是最容易的。要做到这一点:
digit = number % 10
(这是模运算)。您将获得0到9之间的整数。您可以使用0到9选择正确的队列来打开您的电话号码。
当您将所有数字排队到10个桶中后,您需要将它们从那里复制回单个列表中。然后重复,只要您还没有处理过任何数字的数字。