0

我不知道如何从队列数组中删除值并使用基数排序将它们放入整数数组中。

这是我现在拥有的代码:

 public static void radixSort(int[] a) {
  //Create an array of 10 empty array queues
  Queue[] arr =  new Queue[a.length];

  for (int i = 0; i < arr.length; i++)
      arr[i] = new ArrayQueue();

  for (int place = 1; place <= 100000; place *= 10) {
      for (int i = 0; i < a.length; i++)
          arr[i].add(selectDigit(a[i],place));
      for (int j = 0; j < arr.length; j++)
         a[j] = (Integer) arr[j].iterator().next();     
  } 
 }

place 是一个应该为 (1,10,100,1000,100000) 的 int,它指的是 6 位数字中的位置,例如 place = 1 in 684720 从 selectDigit 返回的数字将为 0(第 1 位)和等 selectDigit 采用参数(int digit,int place)。现在我有一个空数组 arr,其中每个索引都包含一个空数组队列。对于数组中的每个数字 a,我将正确的 1s、10s、100s 等值添加到 arr[i] 的正确索引中。在这部分中,我不确定是否应该将队列中的每个值移回数组中,但我不确定如何实现这一点。

编辑:上面的修改后的代码产生以下输出(仍然不正确),它基本上在 a 的每个索引中都有最后一位(排序前),但不是 10s、100s、1000s 等位置。

Array before sort: 602408, 183305, 695804, 934237, 285465, 860846, 196873, 139853, 444089, 594823, 436004, 812525, 302271, 104933, 811084, 350006, 115421, 582466, 192803, 163908, 380316, 734056, 595086, 314881, 784318, 959734, 834553, 982188, 272574, 98232
Array after  sort: 8, 5, 4, 7, 5, 6, 3, 3, 9, 3, 4, 5, 1, 3, 4, 6, 1, 6, 3, 8, 6, 6, 6, 1, 8, 4, 3, 8, 4, 2
4

1 回答 1

0

不要重新发明轮子。你的方法应该被删除,你应该只调用它:

Arrays.sort(a);
于 2012-11-19T01:53:59.397 回答