이 병합 정렬로 인해 스택 오버플로가 발생하는 이유를 알 수 없습니다. 그것은 기본 케이스가 없기 때문이며, 그렇다면 어떻게 추가 할 것인가? 병합 정렬은 나 같은 초보자에게는 매우 유용합니다. (따라서 도움이나 조언을 부탁드립니다.) 또한 배열을 재귀 적으로 분할하면 데이터가 저장되는 위치를 이해하는 데 문제가 있습니다. 원래 배열을 분할하면 문제가 발생한다는 것을 이해합니다. 어디에 아래로 개별 요소로하지만, 이러한 개별 요소는이 코드 ?? 문제의병합 정렬로 스택 오버플로 생성
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 레이, 왼쪽, 중간)'또는 뭔가 비슷한 :) (Sub MergeSort 내부에서는 똑같은 매개 변수를 사용하여 함수를 호출합니다.) – Icepickle
결함을 발견하기위한 Ahh 1 위로. 코드를 수정하지만 여전히 오버플로가 발생합니다. – Rich
어떤 경우에는 왼쪽과 가운데도 동일하므로 가운데가 올바르지 않고 가운데가 1이 아닌 경우에만 호출하십시오. 내가 글을 삭제했기 때문에, 코드에 많은 결함이 많이있어, 조금 더 오래 작업해야한다고 생각합니다.) – Icepickle