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天以來我一直在這裏 - 請幫助。
我認爲本人完全清楚,其中i正在錯誤的問題不在於我在尋找解決方案時遇到的錯誤。看到這個答案的可笑得到2票。爲什麼?因爲有人能夠使用調試器來查找運行時錯誤。來吧,即使我可以做到這一點。 –
@Lohit我的回答的目的是向你解釋爲什麼你有這些錯誤(其中錯誤的確沒有被你要求,我也不在乎)以及原因,那就是你需要檢查算法,因爲你在做什麼是錯誤的,因爲你傳遞了錯誤的參數值。甚至有人在這裏求助,甚至無法弄清楚錯誤的原因,並研究解決問題的更好方法,這實在是太荒謬了。 –
@Lohit爲了解決你的功課或給你一個工作算法不是我的工作。在這裏,所有人都要求所有幫助,而人們並沒有解決你的鍛鍊,他們也不適合你。他們可以給你一個關於問題是什麼和/或如何解決問題的建議。學習,理解和解決問題取決於你。 –