java - Java 基数排序

标签 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;}

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

最佳答案

你的数组,bin不会仅仅因为您希望它像队列一样工作:) 数组没有像 add() 这样的方法和remove() 。对于如何解决此问题,您有两种选择:

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

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

更新其他详细信息:

您询问如何从数字中提取单个数字。正如维基百科文章中所建议的,从最低有效数字 (LSD) 开始工作是最简单的。为此:

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

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

当您将所有号码排入 10 个存储桶后,您需要将它们从那里复制回单个列表中。然后,只要任何数字中仍有未处理的数字,就重复此操作。

关于java - Java 基数排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1736808/

相关文章:

java - 将spring持久化存储库注入(inject)到服务层

Java 给定这个源代码,如何将其放入 .jar 并作为外部库附加到我的项目

java - 使用 RxJava 从异步调用返回值?

c - 如何改进基数排序的实现?

c++ - 基数排序算法说明

javascript - JavaScript 中的基数排序

java - 创建名称为 'org.springframework.validation.beanvalidation.OptionalValidatorFactoryBean#0 的 bean 时出错

java - 从 JTable 拖放到 JLayeredPane

algorithm - 就地进行基数排序 - 尝试了解如何进行

c++ - 具有堆分配的大型数组的段错误