0

キューの配列から値を削除し、基数ソートを使用して 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 であり、684720 の place = 1 のような 6 桁の数字の場所を参照し、selectDigit から返される数字は 0 (1 の位) になり、 selectDigit はパラメーター (int digit、int place) を受け取ります。現在、空の配列 arr があり、各インデックスは空の arrayQueue を保持しています。配列 a の各桁について、適切な 1、10、100 などの値を arr[i] の適切なインデックスに追加します。各値をキューから配列に戻す必要があるかどうかはわかりませんが、どうすればそれを達成できるかわかりません。

編集:上記の改訂されたコードは、基本的に(ソート前の)各インデックスの最後の桁を含むが、10、100、1000などの場所を含まない次の出力(まだ正しくない)を生成します。

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 に答える