2013-02-02 30 views
0

我一直在試圖實現我的「自己的」MergeSort,它似乎適用於較小的值,但我試圖在一個1-100,000的數組隨機順序,並獲得一些奇怪的數字混合在當我打印出來。我已經跟蹤了10次,沒有運氣。MergeSort wonkiness

public static void mergeSort(int[] array){ 
    if(array.length > 1){ 

     int midPoint = array.length/2; 

     int[] leftArray = new int[midPoint]; 
     int[] rightArray = new int[array.length - midPoint]; 

     System.arraycopy(array, 0, leftArray, 0, midPoint); 
     System.arraycopy(array, midPoint, rightArray, 0, array.length - midPoint); 

     mergeSort(leftArray); 
     mergeSort(rightArray); 

     merge(leftArray, rightArray, array); 
    } 
} 

public static void merge(int[] left, int[] right, int[] bigArray){ 
    int counterLeft = 0, counterRight = 0, counterNewArray = 0; 

    while(counterLeft < left.length && counterRight < right.length){ 
     if(left[counterLeft] < right[counterRight]){ 
      bigArray[counterNewArray] = left[counterLeft]; 
      counterLeft++; 
      counterNewArray++; 
     }else{ 
      bigArray[counterNewArray] = right[counterRight]; 
      counterRight++; 
      counterNewArray++; 
     } 
    } 

     while(counterLeft < left.length){ 
       bigArray[counterNewArray] = left[counterLeft]; 
       counterLeft++; 
     } 

     while(counterRight < right.length){ 
       bigArray[counterNewArray] = right[counterRight]; 
       counterRight++; 
     } 

     if(bigArray.length < 500){ 
      System.out.println("Merged array:"); 
      for(int i = 0; i < bigArray.length; i++){ 
       System.out.println(bigArray[i]); 
      } 
     } 
} 
+0

」一些奇怪的數字混在「....你能舉個例子嗎?編譯器中的int類型有多大?有時候溢出可以和你玩...... – Floris

+0

@弗洛里斯:這是Java。 Ints的大小是32位。 – cHao

回答

2

截至merge末,當你添加剩下每側的......你不是遞增counterNewArray。這導致一堆值分配給一個點,相互覆蓋......並將bigArray的尾部留下無效值(零,IIRC)。 「

+0

+1這聽起來是正確的。 –

+0

嗯,這是有道理的,我明白了爲什麼我在我的蹤跡中忽略它。謝謝! – Ristoph

+0

是的測試,修復它。 –