Вопрос
Добро пожаловать.У меня есть метод сортировки по основанию, который использует массив для прохождения, но должен иметь другой массив (bin), который будет храниться в пустой очереди.Я не понимаю, как мне составить очередь за мусорными баками.У меня также есть метод findPlace, который при вызове находит место каждой цифры.Итак, вот что я получил.Может ли кто-нибудь помочь мне найти то, что мне не хватает?Большое спасибо за ваше время.
public static void radix(int [] list){
int [] bin = new int[10];
ArrayQueue<Integer> part = new ArrayQueue<Integer>(); // EDIT What would I do with this queue??
int num = 0;
for(int i=0;i<list.length;i++)
{
bin[i] = 0;
}
for(int pass=0;pass<list.length;pass++)
{
for(int num=0;num<list.length;num++)
{
int digit=findPlace(bin[pass], num);
}
bin[digit].add(list[num]); // add to the bin
}
// Put back into list
for(int h=0; h<10; h++)
{
while(!bin[h].isEmpty())
{
list[num] = bin[queueNum].remove();
num++;
}
}
}
public static int getPlace (int x, int place)
{return x/place % 10;}
Я также создал метод поиска ведра. Так что мне просто нужно знать, как поместить его в массив, я бы просто сделал это?part.add(getPlace(x, место));?
Решение
Ваш массив, bin
не действует как очередь только потому, что вы этого хотите :) У массивов нет таких методов, как add()
и remove()
.У вас есть два варианта, как это исправить:
Запрограммируйте правильную обработку очередей самостоятельно:Очередь состоит из массива и двух указателей на этот массив, традиционно называемых
head
иtail
.Вам придется написать свои собственные методы для добавления и удаления, которые будут работать с массивом и указателями и заботиться о пустой или переполненной очереди.Используйте встроенный класс Java Java.Это описано в Javadocs библиотеки.Однако не знаю, предполагает ли ваше задание создание собственной очереди.
Обновлять еще одна деталь:
Вы спросили, как извлечь из числа одну цифру.Проще всего работать с младшими цифрами (LSD), как предложено в статье в Википедии.Для этого:
- Чтобы извлечь последнюю цифру, выполните
digit = number % 10
(это операция по модулю).Вы получите целое число от 0 до 9 включительно. - Чтобы убрать последнюю цифру, просто разделите число на 10.Затем вы можете снять еще одну цифру.
- Поскольку вам придется несколько раз просматривать n-ю последнюю цифру числа, лучше всего вынести эту функциональность в отдельный метод.
Вы можете использовать номера от 0 до 9, чтобы выбрать правильную очередь для внесения своего номера.
Когда вы закончите расставлять все свои числа по 10 сегментам, вам нужно скопировать их оттуда обратно в единый список.Затем повторяйте до тех пор, пока в любом числе не останутся необработанные цифры.