繁体   English   中英

对6位非负数数组的基数排序

[英]radix sort on array of 6 digit non-negative numbers

我无法弄清楚如何从队列数组中删除值,并使用基数排序将它们放入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接受参数(整数位,整数位)。 现在我有一个空数组arr,其中每个索引都包含一个空arrayQueue。 对于数组中的每个数字,我将正确的1s,10s,100s等添加到arr [i]的正确索引中。 在这一部分中,我不确定是否应该将每个值从队列移回数组中,但是我不确定如何实现。

编辑:上面修改的代码产生以下输出(仍然不正确),该输出基本上具有(排序之前)每个索引中的最后一位,但没有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

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

Arrays.sort(a);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM