2014-05-07 72 views
0

我一直在尋找一種方法來排序arraylist而不使用collections.sort,因爲我自己的邏輯有缺陷,而且我一直有很多麻煩。如何在不使用collections.sort()的情況下對arraylist進行排序?

我需要以一種方式對它進行排序,以便我可以使用我創建的方法,該方法基本上可以完成collections.swap所做的操作,以便完全排列數組列表。

這裏是我的代碼:

public static void mySort(ArrayList<Double> sort){ 

    int min = 0; 
    int i; 
    int j = 0; 
     for(i = 0; i < sort.size() - 1; i++) { 
      min = i; 
      mySwap(sort, j ,min); 

      for(j = 0; j < sort.size() -1;j++){ 
       if(j < min){ 
        min = j; 
       } 
      } 
    } 
} 

public static void mySwap(ArrayList<Double> a, int x, int y){ 

    double temp = a.get(x); 
    a.set(x,a.get(y)); 
    a.set(y,temp); 
} 

我一直有很多的這種麻煩。對不起,如果這是一個問題是危害社區。

+3

爲什麼'Collections.sort'不適合你? –

+0

家庭作業問題我一直在努力。這只是其中的一部分。我似乎無法弄清楚。 –

+1

@AnubianNoob澄清沒有錯 - 有時問題提問者根本不知道某事,而訪問者應該知道答案只在非常具體(人爲)的限制下才有意義。 –

回答

0

我想,你希望下面的算法:在陣列的其餘部分找到分鐘,與當前的元素開始與第一個交換吧,重新休息是數組增加+1指數開始。

你應該更新你的代碼是這樣的:

public static void swap(List<Integer> sort, int i, int j) { 
    int tmp = sort.get(i); 
    sort.set(i, sort.get(j)); 
    sort.set(j, tmp); 
} 

public static void doSort(List<Integer> sort) { 
    int min; 
    for (int i = 0; i < sort.size(); ++i) { 
     //find minimum in the rest of array 
     min = i; 
     for (int j = i + 1; j < sort.size(); ++j) { 
      if (sort.get(j) < sort.get(min)) { 
       min = j; 
      } 
     } 

     //do swap 
     swap(sort, i, min); 
    } 
} 

你有找到最小值,然後交換物品的錯誤。請注意,代碼可以在很多方面得到改進(我儘量保持讓我們說的編碼方式),例如在swap()中交換整數引用,做BubbleSort,如另一個答案所示(使用相同的算法但更簡單的實現),使用O(n * log(n))複雜度算法等等。

相關問題