2014-03-13 78 views
0

*嘿。所以我有我的mergeSorting問題。我嘗試過不同的方法和方法,但無法讓它工作。我理解mergeSorting的原理,所以在那裏沒有問題。 這是我的我的方法:幾個小時後無法讓我mergeSort工作

public static void TopDownMergeSort(int[] left, int[] right, int n){ 
    TopDownSplitMerge(left, 0, n, right); 
} 

public static void CopyArray(int[] right, int start, int end, int[] left){ 
    for (int i = start;i < end; i++){ 
     right[i] = left[i]; 
    } 
} 

public static void TopDownSplitMerge(int[] left, int start, int end, int[] right){ 
    if (end - start < 2){ 
     int middle = (end + start)/2; 
     TopDownSplitMerge(left, start, middle, right); 
     TopDownSplitMerge(left, middle, end, right); 
     TopDownMerge(left, start, middle, end, right); 
     CopyArray(right, start, end, left); 
    } 
} 

public static void TopDownMerge(int[]left, int start, int middle, int end, int[]right){ 

    int i1 = start, i2 = middle; 

    for (int i = start; i < end; i++){ 
     if (i1 < middle && (i2 >= end || left[i1] <= left[i2])){ 
      right[i] = left[i1++]; 
     } 
     else { 
      right[i] = left[i2++]; 
     } 
    } 
} 

public static int[] mergeSort(int[] in) { 
    int[] arr = in.clone(); 
    int[] temp = in.clone(); 

    TopDownSplitMerge(arr,0,arr.length,temp); 
    return arr; 
} 

這也是我如何測試歸併。

int[] list = {2,5,8,6,9,7,3,4}; 

     System.out.println("Before mergesort: "+Arrays.toString(list)); 

     int[] ne = SortingAlgorithms.mergeSort(list); 

     System.out.println("After mergesort: "+Arrays.toString(ne)); 
+0

預期產量是多少?什麼是實際? – eugene82

+0

預期結果當然是一個排序數組。 其結果是:合併之前:[2,5,8,6,9,7,3,4] 合併後:[2,5,8,6,9,7,3,4] – jabbeboy

+0

我會建議使用列表而不是數組並實際分割列表。與索引雜耍是容易出錯的。 – ilmirons

回答

0

一些提示: CopyArray可以通過System.arraycopy替代...此外反思:if (end - start < 2)

而不是固定的代碼,我建議你檢查由Thomas H. Cornmen書算法導論

+0

Okey。謝謝您的幫助。將研究它,並閱讀更多關於它:) – jabbeboy

1
if (end - start < 2) 

是錯誤的。它應該是