Implementare il merge sort in VB.NET
Da Wikipedia:
Il merge sort è un algoritmo di ordinamento basato su confronti che utilizza un processo di risoluzione ricorsivo, sfruttando la tecnica del Divide et Impera, che consiste nella suddivisione del problema in sottoproblemi della stessa natura di dimensione via via più piccola. Fu inventato da John von Neumann nel 1945. Una descrizione dettagliata e un'analisi della versione bottom-up dell'algoritmo apparve in un articolo di Goldstine e Neumann già nel 1948.
Ovviamente possiamo implementarlo in tutti i linguaggi che vogliamo.
Qui sotto un esempio in VB.NET:
Module Program
Sub Main(args As String())
Dim arr As Integer() = {13, 78, 99, 500, 1, 3}
Console.WriteLine("ARRAY ORIGINALE:")
printArray(arr)
mergeSort(arr, 0, arr.Length - 1)
Console.WriteLine("ARRAY ORDINATO:")
printArray(arr)
End Sub
Sub mergeArray(ByVal arr As Integer(), ByVal l As Integer, ByVal m As Integer, ByVal r As Integer)
Dim n1 As Integer = m - l + 1
Dim n2 As Integer = r - m
Dim left As Integer() = New Integer(n1) {}
Dim right As Integer() = New Integer(n2) {}
Dim i As Integer = 0
Dim j As Integer = 0
For i = 0 To n1 - 1
left(i) = arr(l + i)
Next
For j = 0 To n2 - 1
right(j) = arr(m + 1 + j)
Next
i = 0
j = 0
Dim k As Integer = l
While i < n1 AndAlso j < n2
If left(i) <= right(j) Then
arr(k) = left(i)
i += 1
Else
arr(k) = right(j)
j += 1
End If
k += 1
End While
While i < n1
arr(k) = left(i)
i += 1
k += 1
End While
While j < n2
arr(k) = right(j)
j += 1
k += 1
End While
End Sub
Sub mergeSort(ByVal arr As Integer(), ByVal l As Integer, ByVal r As Integer)
If l < r Then
Dim m As Integer = l + (r - l) / 2
mergeSort(arr, l, m)
mergeSort(arr, m + 1, r)
mergeArray(arr, l, m, r)
End If
End Sub
Sub printArray(ByVal arr As Integer())
Dim n As Integer = arr.Length
For i As Integer = 0 To n - 1
Console.Write(arr(i) & " ")
Next
Console.WriteLine()
End Sub
End Module
Enjoy!
vbnet merge sort
Commentami!