2017-02-25 75 views
-1
public static int[] mergeArray(int[] a, int[] b) { 
    int[] result = new int[a.length + b.length]; 

    int i = 0; // to index array a 
    int j = 0; // to index array b 

    for (int k = 0; k < result.length; k++) { 
     if(a.length == i+1) { 
      result[k] = b[j-1]; 
      j++; 
     }else if(b.length == j+1) { 
      result[k] = a[i-1]; 
      i++; 
     }else if(a[i] > b[j]) { 
      result[k] = b[j]; 
      j++; 
     }else if(a[i] < b[j]) { 
      result[k] = a[i]; 
      i++; 
     } 
    } 
    return result; 
} 

// this method does the same thing as sortArray but much more efficiently 
// it uses meregeArray 
public static int[] mergeSortArray(int[] poop) { 
    int[] p1 = new int[poop.length/2]; 
    int[] p2 = new int[poop.length-p1.length]; 
    for (int i = 0; i<p1.length; i++) { 
     p1[i] = poop[i]; 
    } 
    for (int i = 0; i<p2.length; i++) { 
     p2[i] = poop[i+p1.length - 1]; 
    } 
    sortArray(p1); 
    sortArray(p2); 
    return mergeArray(p1, p2); 
} 

public static void main(String[] args) { 
    int[] poop = new int[] {1, 3, 5, 7, 9, 2, 4, 6, 8, 10}; 
    String s = ""; 
    for(int i : mergeSortArray(poop)){ 
     s += i + ", "; 
    } 
    System.out.println(s); 
} 

代碼需要INT [],並將其轉換成兩個,則進行排序,但誤差似乎是在輸出作爲你可以看到下面它輸出兩個6的其是奇數和我不知道,任何幫助,將不勝感激:)java的歸併排序怪異輸出

這裏是輸出: 1,2,3,4,5,6,7,6,8,9,

謝謝大家誰幫助:)

+1

你試過調試你的程序嗎?在'mergeSortArray'的初始運行後(提示 - 否),你會在p1,p2得到預期的結果嗎?什麼是'sortArray(p1)'? – TDG

回答

1

首先,你並不比其他人在宇宙中更聰明。在內部Java使用歸併和其他高效的算法,你可以在source code of java.util.Arrays

例如參見其次,我認爲,是因爲這個bug陣列的行

p2[i] = poop[i+p1.length - 1]; // bad 
    p2[i] = poop[i+p1.length];  // good 

一個錯誤是分裂錯誤地從取出10輸出

第三點存在mergeArray一個bug,它應該是

if(a.length == i) { 
     result[k] = b[j]; 
     j++; 
    } else if(b.length == j) { 
     result[k] = a[i]; 
     i++; 

這是「6」

重複的結果,爲TDG說,學習調試代碼是你應該學習的關鍵技能。