Вопрос

Добро пожаловать.У меня есть метод сортировки по основанию, который использует массив для прохождения, но должен иметь другой массив (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 сегментам, вам нужно скопировать их оттуда обратно в единый список.Затем повторяйте до тех пор, пока в любом числе не останутся необработанные цифры.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top