2013-11-03 37 views
1

這是我的課是如何設計:IndexOutOfRangeException與歸併排序

class MergeSort 
    { 
     int[] mArray; 
     public MergeSort(int[] A) 
     { 
      mArray = A; 
     } 
     void Merge(int[] A,int p ,int q, int r) 
     { 
      int n1 = q - p + r; 
      int i = 0, j = 0; 
      int n2 = r - q; 
      int[] left = new int[n1+1]; 
      int[] right = new int[n2+1]; 
      for (i = 0; i < n1; i++) 
       left[i] = A[p + i - 1]; 
      for (i = 0; i < n2; i++) 
       right[i] = A[q + i]; 
      left[n1] = Int32.MaxValue; 
      right[n2] = Int32.MaxValue; 
      i = j = 0; 
      for (int k = p; k < r; k++) 
      { 
       if (left[i] <= right[j]) 
       { 
        A[k] = left[i]; 
        i++; 
       } 
       else 
       { 
        A[k] = right[j]; 
        j++; 
       } 
      } 

     } 
     public void Merge_Sort(int[] A, int p, int r) 
     { 
      int q = 0; 
      mArray = A; 
      if(p<r) 
      { 
       q = (p+r)/2; 
       Merge_Sort(A,p,q); 
       Merge_Sort(A, q + 1, r); 
       Merge(A,p,q,r); 
      } 
     } 
     public string show() 
     { 
      StringBuilder sb = new StringBuilder(); 
      for (int i = 0; i < mArray.Length; i++) 
      { 
       sb.Append(mArray[i].ToString() + " "); 
      } 
      return sb.ToString(); 
     } 
    } 

這也是我如何去排序:

 int[] arr = { 10, 12, 5, 6, 30, 1, 11, 120, 12 }; 
     MergeSort ms = new MergeSort(arr); 
     ms.Merge_Sort(arr, 0, arr.Length); 
     MessageBox.Show(ms.show()); 

,但我不斷收到錯誤Index was outside the bounds of the array.在很多地方我Merge功能。我試圖按照CLRS(Coremen)書中所述的算法實現該算法。但是我不斷收到這個錯誤,自3天以來我一直在這裏 - 請幫助。

回答

1

您在第left[i] = A[p + i - 1];行中發生錯誤,因爲您傳遞了錯誤的參數值。的確,在該行中,p爲零。在循環的第一次執行中,具有i=0A陣列中所得到的位置是-1,引起IndexOutOfRange例外,如下所示:

enter image description here

+0

我認爲本人完全清楚,其中i正在錯誤的問題不在於我在尋找解決方案時遇到的錯誤。看到這個答案的可笑得到2票。爲什麼?因爲有人能夠使用調試器來查找運行時錯誤。來吧,即使我可以做到這一點。 –

+0

@Lohit我的回答的目的是向你解釋爲什麼你有這些錯誤(其中錯誤的確沒有被你要求,我也不在乎)以及原因,那就是你需要檢查算法,因爲你在做什麼是錯誤的,因爲你傳遞了錯誤的參數值。甚至有人在這裏求助,甚至無法弄清楚錯誤的原因,並研究解決問題的更好方法,這實在是太荒謬了。 –

+0

@Lohit爲了解決你的功課或給你一個工作算法不是我的工作。在這裏,所有人都要求所有幫助,而人們並沒有解決你的鍛鍊,他們也不適合你。他們可以給你一個關於問題是什麼和/或如何解決問題的建議。學習,理解和解決問題取決於你。 –