我已經問這個PROGRAMM before一個具體的問題,但現在我被困在最後一步,我想這可能會更好,打開一個新的線程它。
說明:
我需要實現的排序爲從0至99999遞歸一個PROGRAMM(這基本上是基數排序)。該過程本身有點類似於:用戶鍵入的數組中包含主方法中的這些數字。然後,主要方法調用排序方法,我創建了一個名爲'space'的具有10行和1列的二維數組。然後,我將數組中的每個數字除以數字,在第一次運行中將爲10.000。因此,例如,23456/10000 = 23456 = 2(在java中),因此,程序將這個數字放在空間[2] [0]中,所以在第二行。然後,我們把這整行和擴展它,這是在putInBucket方法中完成的。我們這樣做是爲了確保我們可以將另一個數字放入同一行。
我們爲「數字」數組內的每個數字執行此操作。然後,我們想要使用這些行並按照相同的原則重新排序它們,但現在我們來看看第二個數字。我們希望從左到右這樣做,而不是從右到左。所以,如果我們的第二行應該是這樣的
[23456,24567],
我們會要比較的3和4。爲了做到這一點,我們在每次遞歸計算位數/ 10呼叫。如果數字爲0,則不需要再進行排序。
遞歸調用本身適用於從0到9的行,我們之前放入不同的數字,現在通過將它們放在不同的行中再次對它們進行排序。
問:
我覺得PROGRAMM做的事情是應該做的。不幸的是,我不知道如何正確打印結果。例如,在下面的代碼中,我試圖在main方法中打印出存儲桶,但它只給了我剛纔輸入的數組,所以這不可能是正確的。
我需要從第9行的所有元素開始,如果此行包含多個數字,我必須按照遞歸調用的結果對它們進行排序。
有沒有人有一個想法如何正確實施這個?提前致謝!
public static int[] sort(int[] numbers, int digit) {
if (numbers.length <= 1 || digits == 0)
return numbers;
int[][]space = new int[10][1];
int i, j = 0;
for (j = 0; j < numbers.length; j++) {
i = numbers[j]/digit % 10;
space[i][0] = numbers[j];
space[i] = putInBucket(space[i], numbers[j]);
}
digit = digit/10;
for (i = 0; i < 9; i++) {
sort(space[i], digit);
}
return numbers
}
private static int[] putInBucket(int[] bucket, int number) {
int[] bucket_new = new int[bucket.length+1];
for (int i = 1; i < bucket_new.length; i++) {
bucket_new[i] = bucket[i-1];
}
return bucket_new;
}
public static void main (String [] argv) {
int[] numbers = IO.readInts("Numbers: ");
int digit = 10000;
int[] bucket = sort(numbers, digit);
for (int i = 0; i < bucket.length; i++) {
System.out.println(bucket[i]);
}
非常感謝您的努力! :-) – Julian
對我來說也是富有成效的。我是在(錯誤的)假設下,多維數組的行是固定的。 –