سؤال

مرحباً.لدي طريقة فرز جذري تستخدم مصفوفة للتنقل، ولكن يجب أن يكون لديها مصفوفة أخرى (صندوق) سيتم تخزينها في قائمة انتظار فارغة.أنا في حيرة من أمري بشأن كيفية عمل قائمة انتظار للصناديق.لدي أيضًا طريقة 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, place));؟

هل كانت مفيدة؟

المحلول

المصفوفة الخاصة بك، bin لا تعمل كقائمة انتظار فقط لأنك تريد ذلك :) لا تحتوي المصفوفات على طرق مثل add() و remove().لديك خياران حول كيفية إصلاح هذا:

  • برنامج في التعامل الصحيح مع قوائم الانتظار بنفسك:تتكون قائمة الانتظار من مصفوفة ومؤشرين في تلك المصفوفة، والتي تسمى تقليديًا head و tail.سيتعين عليك كتابة أساليبك الخاصة للإضافة والإزالة، والتي ستعمل مع المصفوفة والمؤشرات وتعتني بقائمة الانتظار الفارغة أو الممتلئة.

  • استخدم فئة قائمة الانتظار المضمنة في Java.تم توثيقه في Javadocs بالمكتبة.لا تعرف ما إذا كانت مهمتك تهدف إلى إنشاء قائمة انتظار خاصة بك أم لا.

تحديث مع تفصيل آخر:

لقد سألت عن كيفية استخراج رقم واحد من رقم.من الأسهل العمل من الأرقام الأقل أهمية (LSD) كما هو مقترح في مقالة ويكيبيديا.للقيام بذلك:

  • لاستخراج الرقم الأخير، افعل digit = number % 10 (هذه هي عملية modulo).سوف تحصل على عدد صحيح بين 0 و 9 ضمنا.
  • لإزالة الرقم الأخير، ما عليك سوى القسمة على 10.ثم يمكنك سحب رقم آخر.
  • نظرًا لأنك ستحتاج إلى النظر إلى الرقم الأخير من الرقم n عدة مرات، فمن الأفضل أن تضع هذه الوظيفة في طريقة منفصلة.

يمكنك استخدام 0 إلى 9 لتحديد قائمة الانتظار الصحيحة لوضع رقمك عليها.

عند الانتهاء من ترتيب جميع أرقامك في المجموعات العشرة، ستحتاج إلى نسخها من هناك مرة أخرى إلى قائمة واحدة.ثم كرر ما دام لا يزال هناك أرقام في أي رقم لم تقم بمعالجته.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top