嗨,那裏我仍然無法找出爲什麼我的代碼給我堆棧溢出它的接縫,我的合併排序算法的低和高界限改變某處不應該做的。 。如何控制合併排序我的算法的堆棧溢出
int[] arr = new int[10];
private void button1_Click(object sender, EventArgs e)
{
merge_sort(0, 9);
}
private void merge_sort(int left, int right)
{
if (left > right)
merge(left, right, (left + right)/2);
else
merge_sort((left + right)/2 + 1, right);
merge_sort(left, (left + right)/2);
}
void merge(int low, int high, int mid)
{
int i, j, k, t;
j = low;
for (i = mid + 1; i <= high; i++)
{
while (arr[j] <= arr[i] && j < i)
j++;
if (j == i)
break;
t = arr[i];
for (k = i; k > j; k--)
arr[k] = arr[k - 1];
arr[j] = t;
}
}
它總是冷靜地看到在這裏 – user12345613
一個實際的堆棧溢出問題,從高層次的代碼看起來不正確的。合併排序通常採用分而治之的形式'merge_sort(left)'然後'merge_sort(right)'然後調用'merge()'。 [參考這裏](http://en.wikipedia.org/wiki/Merge_sort) – Blastfurnace
你的意思是,第一次merge_sort(左)完成合並()應運行和merge_sort(右)相同! – John