"Scrivi il pseudocodice per un algoritmo di Merge Sort."
MergeSort(A, startIndex, endIndex):
    // Se c'è solo un elemento nell'array, restituisci
    if startIndex == endIndex:
        return

    middleIndex = (startIndex + endIndex) / 2

    // Ordina la metà sinistra dell'array
    MergeSort(A, startIndex, middleIndex)

    // Ordina la metà destra dell'array
    MergeSort(A, middleIndex + 1, endIndex)

    // Unisci i due array ordinati
    Merge(A, startIndex, endIndex)

Merge(A, startIndex, endIndex):
    middleIndex = (startIndex + endIndex) / 2
    leftIndex = startIndex
    rightIndex = middleIndex + 1

    // Array temporaneo per contenere l'array ordinato
    tempArray[]

    // Itera attraverso entrambe le metà dell'array
    for i in range(startIndex, endIndex+1):
        // Se la metà sinistra ha finito di iterare, aggiungi dalla metà destra
        if leftIndex > middleIndex:
            tempArray[i] = A[rightIndex]
            rightIndex++

        // Se la metà destra ha finito di iterare, aggiungi dalla metà sinistra
        else if rightIndex > endIndex:
            tempArray[i] = A[leftIndex]
            leftIndex++

        // Confronta l'elemento corrente e aggiungi l'elemento più piccolo
        else if A[leftIndex] < A[rightIndex]:
            tempArray[i] = A[leftIndex]
            leftIndex++
        else:
            tempArray[i] = A[rightIndex]
            rightIndex++

    // Copia il tempArray in A
    for i in range(startIndex, endIndex+1):
        A[i] = tempArray[i]