2012-05-31 129 views
0

我在轉換我的排序類以使用數組列表對象時遇到問題。它目前正在排序對象,但我很難將其轉換爲排序Arraylists。下面是代碼:使用合併排序對數組列表排序

package Merge_Sort_Objects_ArrayList; 
import java.util.ArrayList; 
public class mergesort { 

    /** 
    * Merges two sorted portion of items array 
    * pre: items[start.mid] is sorted. items[mid+1.end] sorted. start <= mid <= end 
    * post: items[start.end] is sorted 
    */ 

    private static void merge(ArrayList <Comparable> items, int start, int mid, int end){ 
      Comparable temp; 
      int pos1 = start; 
      int pos2 = mid + 1; 
      int spot = start; 
      ArrayList <Comparable> objectSort = items; 

      while (!(pos1 > mid && pos2 > end)){ 
       if ((pos1 > mid) || ((pos2 <= end) &&(items[pos2].getRadius() < items[pos1].getRadius()))){ 
        temp[spot] = items[pos2]; 
        pos2 +=1; 
       }else{ 
        temp[spot] = items[pos1]; 
        pos1 += 1; 
       } 
       spot += 1; 
      } 
      /* copy values from temp back to items */ 

      for (int i = start; i <= end; i++){ 
       items[i] = temp[i]; 
      } 
    } 

    /** 
    * mergesort items[start..end] 
    * pre: start > 0, end > 0 
    * post: items[start..end] is sorted low to high 
    */ 
    public static void mergesort(ArrayList <Comparable> items, int start, int end){ 
     if (start < end){ 
      int mid = (start + end)/2; 
      mergesort(items, start, mid); 
      mergesort(items, mid + 1, end); 
      merge(items, start, mid, end); 
     } 
    } 
} 

我現在已經開始將它轉換,但我被困在這一節就在這裏:

while (!(pos1 > mid && pos2 > end)){ 
      if ((pos1 > mid) || ((pos2 <= end) &&(items[pos2].getRadius() < items[pos1].getRadius()))){ 
       temp[spot] = items[pos2]; 
       pos2 +=1; 
      }else{ 
       temp[spot] = items[pos1]; 
       pos1 += 1; 
      } 
      spot += 1; 
     } 
     /* copy values from temp back to items */ 

     for (int i = start; i <= end; i++){ 
      items[i] = temp[i]; 
     } 

預先感謝您!

+1

澄清你的意思是「卡住」。你遇到什麼麻煩?你有什麼嘗試?這對我來說很簡單。 –

+0

我堅持的是將while語句轉換爲使用數組列表且沒有錯誤的while語句。我遇到的問題是我不確定如何開始轉換它。 – Spartan

+0

哦,所以你有錯誤?什麼是錯誤?這意味着你已經付出了一些努力,對吧?那麼爲什麼你不顯示你已經嘗試過的while循環。這兩件事都是相當明顯的相關信息。 –

回答

1

使用的事實,

Foo[] array = ......; 
Foo rhs = .....; 
Foo lhs; 
array[i] = rhs; 
lhs = array[j]; 

類似於:

ArrayList<Foo> list = .....; 
Foo rhs = ......; 
Foo lhs; 
list.set(i, rhs); 
lhs = list.get(i); 
+0

謝謝量子。第一次閱讀「foo」等時遇到了一些麻煩,但最終它非常有意義!謝謝! – Spartan