Implementare il merge sort in VB.NET

Mattepuffo's logo
Implementare il merge sort in VB.NET

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!


Condividi

Commentami!