Примечание:Реализация редискуляции Radix - как напечатать элементы в конце?
я уже задал конкретный вопрос по этой программе before, но теперь я застрял на самом последнем этапе, и я предполагаю, что это могло бы быть лучше открыть новую тему для него.
Описание:
Я обязан осуществить программка, которая сортирует числа в диапазоне от 0 до 99999 рекурсивно (это в основном Radix сортировка). Сам процесс является своего рода simpel: пользователь вводит в массив, который содержит эти числа в основном методе. Затем основной метод вызывает метод sort, где я создаю двумерный массив с именем «space» с 10 строками и 1 столбец. Затем я делю каждое число в массиве на цифру, которая будет равна 10.000 в первом прогоне. Так, например, 23456/10000 = 2,3456 = 2 (в java), следовательно, программа помещает это число в космос [2] [0], поэтому во второй строке. Затем мы берем эту всю строку и расширяем ее, что делается в методе putInBucket. Мы делаем это, чтобы убедиться, что мы можем поместить другой номер в одну строку.
Мы делаем это для каждого числа, находящегося внутри массива 'numbers'. Затем мы хотим работать с этими строками и сортировать их по тому же принципу, но теперь посмотрим на вторую цифру. Мы хотим сделать это слева направо, а не справа налево. Так что, если наша вторая строка будет выглядеть следующим образом
[23456, 24567],
мы хотим, чтобы сравнить 3 и 4. Для того, чтобы сделать это, мы вычислим цифру/10 в каждом рекурсивном вызов. Если цифра равна 0, больше нечего сортировать.
Рекурсивный вызов сам по себе работает со строками от 0 до 9, где мы помещаем разные числа до и теперь сортируем их снова, помещая их в разные строки.
Вопрос:
Я думаю, что программа делает то, что он должен делать. К сожалению, я не знаю, как правильно печатать результат. Например, в приведенном ниже коде я попытался распечатать ведро в основном методе, но он только дает мне именно тот массив, который я только что напечатал, так что это невозможно.
Мне нужно начать со всех элементов в строке 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
Это было плодотворно для меня тоже. Я был под (ошибочным) предположением, что строки многомерных массивов фиксированы. –