Radix排序Java

时间:2009-11-15 06:38:53

标签: java radix-sort

欢迎。我有一个使用数组通过的基数排序方法,但必须有另一个存储在空队列中的数组(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));?

1 个答案:

答案 0 :(得分:3)

你的数组bin只是因为你想要它而不像一个队列:)数组没有像add()remove()这样的方法。您有两种选择来解决这个问题:

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

  • 使用Java的内置Queue类。它在图书馆的Javadocs中有记录。但是,不知道你的作业是否打算让你建立自己的队列。

更新并提供其他详细信息:

您询问了如何从数字中提取单个数字。根据维基百科文章中的建议,最简单的数字(LSD)是最容易的。要做到这一点:

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

您可以使用0到9选择正确的队列来打开您的电话号码。

当您将所有数字排队到10个桶中后,您需要将它们从那里复制回单个列表中。然后重复,只要您还没有处理过任何数字的数字。