2013-04-02 80 views
1

我想創建一個合併排序算法,但是當我去排序分解數組時,我進入一個無限循環,主要問題發生在我的合併方法下面。先謝謝您的幫助。合併排序算法無限循環

public static void mergeSort(double[] arr) 
{ 
    int count = n; 
    long startTime = System.currentTimeMillis(); 
    int mid = arr.length; 
    if(arr.length > 1) 
    { 
     mid = arr.length/2; 
    } 
    else 
    { 
     return; 
    } 

    double[] a = new double[mid]; 
    double[] b = new double[arr.length-mid]; 

    for(int i = 0; i < a.length; i++) 
    { 
     a[i] = arr[i]; 
     System.out.println("A = " + a[i]); 
     count++; 
    } 
    for(int i = 0; i < b.length; i++) 
    { 
     b[i] = arr[i+mid]; 
     System.out.println("B = " + b[i]); 
     count++; 
    } 

    mergeSort(a); 
    mergeSort(b); 
    merge(arr, a, b); 
} 

public static void merge(double[] arr, double[] a, double [] b) 
{ 
    int elem = a.length + b.length; 
    int i,j,k; 
    i = j = k = 0; 
    while(i < elem) 
    { 
     if((j < a.length) && (k < b.length)) 
     { 
      if(a[j] < b[k]) 
      { 
       arr[i] = a[k]; 
       i++; 
       j++; 
      } 
      else 
      { 
       arr[i] = b[k]; 
       i++; 
       k++; 
      } 
     } 
     else 
     { 
      if(j >= a.length) 
      { 
       while(k < b.length) 
       { 
        arr[i] = b[k]; 
        i++; 
        k++; 
       } 
      } 
      if(k >= b.length) 
      { 
       while(j >= a.length) 
       { 
        arr[i] = a[j]; 
        j++; 
        i++; 
       } 
      } 
     } 
    } 
} 
+3

這是學習如何使用調試器的絕佳機會! –

+1

'int count = n;'什麼是n,一個靜態的最終大小? –

+0

是的,此刻n是10,儘管我只用count作爲調試工具。 n意味着數組的大小。 – Weava

回答

1
while(j >= a.length) 
{ 
    arr[i] = a[j]; 
    j++; 
    i++; 
} 

我不知道這裏發生了什麼....

而J>時=則爲a.length,做一些事情,使Ĵ做大...當你想到這個結束?

+0

感謝隊友,我似乎總是這樣做,除非通常我能找到它。謝謝! – Weava

+1

在這種情況下,我同意上面的Colin D ...... – Etai

0

如果j大於a.length(可能是),那麼就是你的無限循環。

while(j >= a.length) 
      { 
       arr[i] = a[j]; 
       j++; 
       i++; 
      }