2015-12-02 103 views
1

我有一個學校項目,但我需要一些提示。Bubblesort根據計數重新排列到不同的列表中

我有一個看起來像這樣一個ArrayList:

[0] Document 1 
[1] Document 1 
[2] Document 2 
[3] Document 3 
[4] Document 3 
[5] Document 3 
[6] Document 4 

我需要使用冒泡得到一個不同的列表,看起來像這樣(由OCCURENCES每個文件在最初的名單有數量排序):

[0] Document 3 
[1] Document 1 
[2] Document 2 
[3] Document 4 

我可以自由地創建一個新的ArrayList或者使用一個外部for循環的完成它 - 但它需要由冒泡排序。

我已經創建了其他實現,基於每個文檔的某些屬性創建一個不同的列表 - 但是現在,當面對每個文檔在列表中出現的次數時,我對丟失一個乾淨的解決方案感到迷茫。

編輯:這是我用於分配的其他地方的執行(「屬性」類似於上面我的問題「文件」)

int r = attributes.size() - 1; 
    boolean swapped = true; 
    while(swapped && r >= 0) { 
     swapped = false; 
     for(int i = 0; i < r; i++) { 
      Attributes current = attributes.get(i); 
      Attributes next = attributes.get(i + 1); 
      if(current.occurrence > next.occurrence) { 
       swapped = true; 
       attributes.set(i, next); 
       attributes.set(i + 1, current); 
      } 
     } 
     r--; 
    } 
+0

但氣泡排序的目的是按訂單排序。爲什麼您的輸出中的dos無序? –

+0

對不起,它可能不清楚,所以我編輯的重要。新列表按照第一個列表中出現的次數排序。由於3是原始列表中的三次,因此它的計數最高。 –

+0

好吧,所以你必須使用氣泡排序(你自己的創作?)按頻率排序文檔對象在數組列表中的出現次數,從最大到最小?你有什麼代碼你嘗試過嗎? –

回答

0

給你一個樣板例如,你可以使用像這樣的東西。

List<Integer> arrList = Arrays.asList(5, 0, 0, 2); 
    int freq = Collections.frequency(arrList, "0); 

     System.out.println("Frequency of '0' is: "+freq);  
     } 
+0

由於OP不允許使用標準排序,我非常懷疑他被允許使用'Collections.frequency'。 – dasblinkenlight

+0

@dasblinkenlight哈哈是的,我想這是真的。 –

+0

這解決了它乾淨,在我的內循環中,我能夠使用此語句: if(Collections.frequency(documents,current.document)