2009-11-15 91 views
0

歡迎。我有一個基數排序方法,它使用數組通過,但必須有另一個數組(bin),它將存儲在一個空隊列中。我很困惑,我會如何爲垃圾桶排隊。我還有一個findPlace方法,可以在調用時查找每個數字的位置。所以,這是我得到的。有人能幫我找到我失蹤的東西嗎?非常感謝您的時間。基數排序Java

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));?

回答

3

你的數組,bin並不僅僅因爲你想要的就像一個隊列:)數組沒有像add()remove()這樣的方法。您對如何解決此問題兩種選擇:

  • 計劃在妥善處理了隊列自己:一個隊列由一個陣列和兩個指針成陣,傳統上稱爲headtail。你必須編寫你自己的方法來添加和刪除,這將與數組和指針一起工作,並處理一個空的隊列或溢出的隊列。

  • 使用Java的內置隊列類。它被記錄在圖書館的Javadocs中。不過,不知道你的任務是否打算讓你建立自己的隊列。

更新另一個細節:

你問我如何提取數字的個位數字。正如維基百科文章中所建議的那樣,最簡單的工作方式是從最低有效位數(LSD)開始。要做到這一點:

  • 要提取最後一位數字,請執行digit = number % 10(這是模數運算)。你會得到一個0到9之間的整數。
  • 要去掉最後一位數字,只需除以10.然後您可以拉出另一位數字。
  • 由於您需要多次查看數字的第n位數字,因此您最好將此功能置於單獨的方法中。

你可以使用你的0到9來選擇正確的隊列來把你的號碼。

當您完成將所有號碼排入10個存儲桶後,您需要將它們從那裏複製回單個列表中。然後重複,只要還有數字,你還沒有處理。

+0

是的,你必須在你的排序方法中初始化隊列;在那裏創建隊列也可能是一個好主意。至於你的算法,它看起來是錯誤的,但我不夠聰明,說它應該是什麼樣子。 – 2009-11-15 07:32:23

+0

好吧,我讀了維基百科條目,並找到了一個關於如何使用隊列進行基數排序的部分。據此,你不需要1個而是10個隊列。你讀過描述(還是給出了另一種描述),並想出你需要做什麼? – 2009-11-15 08:08:34

+0

是的,但我不想爲你做功課。無論您使用什麼隊列,都可以製作一個10個陣列。另請參閱上面的答案更新。 – 2009-11-15 19:13:09