我不明白爲什麼這種合併排序導致堆棧溢出。是因爲我沒有基礎案例,如果是的話,我會如何去添加它?對於像我這樣的初學者來說,合併排序是相當先進的:(所以我會很感激任何幫助或建議 此外,我一直無法理解數據存儲在哪裏,一旦你遞歸地分割數組我知道分裂原始數組會破壞它分解成單個的元素,但如果是這些單個元素存儲??合併排序創建堆棧溢出
Sub Main()
Dim Array() As Integer = {5, 4, 3, 1, 2, 6}
Dim right As Integer = Array.Length - 1 'find right index
Dim left As Integer = 0 'set left index
mergeSort(Array, left, right)
End Sub
Sub mergeSort(Array, left, right)
Dim middle As Integer
If left < right Then
middle = (left + right)/2
'recursively split both halves of the array
mergeSort(Array, left, middle)
mergeSort(Array, middle + 1, right)
'sort individual elements
mergeSortedArray(Array, left, middle, middle + 1, right)
End If
End Sub
Sub mergeSortedArray(ByRef Array, left, middle, rbeg, right)
Dim pt As Integer = 0
Dim TempArray(6)
While (left <= middle) And (rbeg <= right) 'sort every element
If Array(left) < Array(rbeg) Then
TempArray(pt) = Array(left)
left += 1
Else
TempArray(pt) = Array(rbeg)
rbeg += 1
End If
pt += 1
End While
If left > middle Then
While rbeg <= right 'left sub array exhausted
TempArray(pt) = Array(rbeg)
rbeg += 1
pt += 1
End While
Else
While left <= middle 'right sub array exhausted
TempArray(pt) = Array(left)
left += 1
pt += 1
End While
End If
For Each element In TempArray
Console.WriteLine(element & " ")
Next
End Sub
很有可能是因爲你還記得使用'mergeSort(Array,left,right)'的遞歸函數,可能該語句應該是'mergeSort(Ar ray,left,middle)'或類似的東西:)(因此,在Sub mergeSort中,您正在調用具有完全相同參數的函數) – Icepickle
Ahh 1用於發現缺陷。將修改代碼,但它仍然會導致溢出 – Rich
是正確的,因爲在某些情況下,左側和中間也是相同的,只有在中間不正確時才調用它們,如果中間+ 1沒有離開。我刪除了我的文章,因爲好,你的代碼有很多其他缺陷,我認爲你需要再努力一下;) – Icepickle