我不明白为什么这种合并排序导致堆栈溢出。是因为我没有基础案例,如果是的话,我会如何去添加它?对于像我这样的初学者来说,合并排序是相当先进的:(所以我会很感激任何帮助或建议 此外,我一直无法理解数据存储在哪里,一旦你递归地分割数组我知道分裂原始数组会破坏它分解成单个的元素,但如果是这些单个元素存储??合并排序创建堆栈溢出
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