2015-08-25 31 views
1

我在java中進行了以下代碼合併排序,但在輸出中我得到的輸出: -
我已經嘗試調試過去兩個小時。我在哪裏錯了?java中實現合併排序時出錯?

public class MergeSort { 

    public static void Mergesort(int[] a){ 
     int n=a.length; 
     if(n<2) 
      return; 
     int mid=n/2; 
     int[] left=new int[mid]; 
     int[] right=new int[n-mid]; 
     for(int i=0;i<mid-1;i++) 
      {left[i]=a[i];} 
     for(int i=mid;i<n-1;i++) 
      {right[i-mid]=a[i];} 
     Mergesort(left); 
     Mergesort(right); 
     merge(left,right,a); 
    } 

    public static void merge(int[]x,int[] y,int[] z){ 
     int p=x.length; 
     int q=y.length; 
     int i=0;int j=0;int k=0; 
     while(i<p&&j<q){ 
      if(x[i]<=y[j]) 
       z[k++]=x[i++]; 

      else 
       z[k++]=y[j++]; 
     } 
     while(i<p) z[k++]=x[i++]; 
     while(j<q) z[k++]=y[j++]; 


    } 



    public static void main(String[] args) { 

     int[] arr={9,10,8,5,1,0}; 
     Mergesort(arr); 
     for(int l=0;l<arr.length;l++) 
     {System.out.println(arr[l]);} 


    } 

} 

輸出是0 0 0 0 0 0
我覺得有一些錯誤的劃分!

回答

3

使用調試器,我可以看到

for(int i=0;i<mid-1;i++) 

for(int i=mid;i<n-1;i++) 

應該

for(int i = 0; i < mid; i++) 

for(int i = mid; i < n; i++) 

您的代碼不會複製最後一個元素,並最終只有全部爲0

+0

謝謝@peter,我是java的新手,只是初學者感謝您的耐心。你使用了一個調試器?我不知道它是什麼以及如何使用它?你能給個提示/鏈接嗎?我在eclipse中編寫代碼JDE –

+0

在你的IDE中,調試按鈕通常位於運行按鈕旁邊。我使用IntelliJ,但eclipse有一個出色的調試器。 –