0

欢迎。我有一个基数排序方法,它使用一个数组来遍历,但必须有另一个数组(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;}

我还做了一个方法来找到存储桶,所以我只需要知道如何将它放入数组中,我会这样做吗?部分.add(getPlace(x, place));?

4

1 回答 1

3

您的数组bin不会像队列那样仅仅因为您想要它:) 数组没有像add()and之类的方法remove()。对于如何解决此问题,您有两种选择:

  • 自己编程正确处理队列:队列由一个数组和两个指向该数组的指针组成,传统上称为headtail。您必须编写自己的方法来添加和删除,这将与数组和指针一起使用,并处理空队列或溢出队列。

  • 使用 Java 内置的 Queue 类。它记录在库的 Javadocs 中。不过,不知道您的任务是否打算让您建立自己的队列。

更新另一个细节:

你问如何从一个数字中提取一个数字。正如维基百科文章中所建议的,从最低有效数字 (LSD) 开始工作是最简单的。要做到这一点:

  • 要提取最后一位数字,请执行digit = number % 10(这是模运算)。你会得到一个介于 0 和 9 之间的整数。
  • 要去掉最后一个数字,只需除以 10。然后你可以去掉另一个数字。
  • 由于您需要多次查看数字的倒数第 n 位,因此最好将此功能放入单独的方法中。

您可以使用 0 到 9 选择正确的队列来放置您的号码。

当您完成将所有数字排队到 10 个存储桶中后,您需要将它们从那里复制回一个列表中。然后重复,只要您尚未处理的任何数字中仍有数字。

于 2009-11-15T06:56:17.880 回答