Я должен реализовать программу, которая рекурсивно сортирует числа от 0 до 99999 (это в основном сортировка Radix). Сам процесс является своего рода simpel: пользователь вводит в массив, который содержит эти числа в основном методе. Затем основной метод вызывает метод sort, где я создаю двумерный массив с именем «space» с 10 строками и 1 столбец. Затем я делю каждое число в массиве на цифру, которая будет равна 10.000 в первом прогоне. Так, например, 23456/10000 = 2,3456 = 2 (в java), следовательно, программа помещает это число в космос [2] [0], поэтому во второй строке. Затем мы берем эту всю строку и расширяем ее, что делается в методе putInBucket. Мы делаем это, чтобы убедиться, что мы можем поместить другой номер в одну строку.Я застрял в реализации редиски Radix
Мы делаем это для каждого числа, находящегося внутри массива 'numbers'. Затем мы хотим работать с этими строками и сортировать их по тому же принципу, но теперь посмотрим на вторую цифру. Мы хотим сделать это слева направо, а не справа налево. Так что, если наша вторая строка будет выглядеть следующим образом
[23456, 24567],
мы хотим, чтобы сравнить 3 и 4, что приводит к 23456 < 24567.
Мы делаем это с помощью рекурсивного вызова в конце метода сортировки. Теперь, когда я потерялся. Я просто не знаю, как манипулировать цифровой переменной, чтобы иметь возможность работать со второй, третьей, ... цифрой каждого номера. В первом прогоне, как вы видите, это можно сделать просто путем деления на 10.000, но я не нашел способ пойти дальше отсюда.
Обратите внимание: Да, это вопрос, связанный с домашним заданием, поэтому я могу использовать здесь только примитивы. Мы не проходили через такие вещи, как math.pow (...). Заранее спасибо!
public static int[] sort(int[] numbers, int digit) {
if (numbers.length == 0)
return numbers;
int[][]space = new int[10][1];
int i, j = 0;
for (j = 0; j < numbers.length; j++) {
i = numbers[j]/digit;
space[i][0] = numbers[j];
space[i] = putInBucket(space[i], numbers[j]);
}
for (i = 0; i < space[i].length; i++) {
sort(space[i], digit); //not sure how to work with digit here
}
return ... //not sure what to return here
}
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);
}
В качестве первого шага используйте вашу среду IDE для автоматического форматирования этого кода, чтобы иметь последовательный отступ (согласованное отступы значительно упрощают вам и нам возможность увидеть структуру кода). На самом деле, я бы рекомендовал настроить ваш идеал для автоматического форматирования кода всякий раз, когда вы сохраняете файл. – meriton
Я работаю с vim, нет автоматического формата, я думаю. – Julian
Что здесь случилось с отступом? – Julian