基数排序在6位非负数的数组上

时间:2012-11-19 00:31:27

标签: java arrays radix-sort

我无法弄清楚如何从队列数组中删除值,并使用基数排序将它们放入一个int数组中。

这是我现在的代码:

 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位数字中的位置,例如684720中的place = 1,selectDigit返回的数字将为0(1s) selectDigit取参数(int digit,int place)。现在我有一个空数组,arr,每个索引都有一个空的arrayQueue。对于数组中的每个数字,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

1 个答案:

答案 0 :(得分:0)

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

Arrays.sort(a);