Funkce mergeSort(array)
    Pokud délka pole array je menší než 2, vrať array
    Nastav middle na délku array / 2
    Nastav left na mergeSort(první polovinu array)
    Nastav right na mergeSort(druhou polovinu array)
    Vrať merge(left, right)

Funkce merge(left, right)
    Vytvoř pole result
    Dokud left a right nejsou prázdné:
        Pokud první prvek v left je menší než první prvek v right:
            Přidej první prvek z left do result
            Odeber první prvek z left
        Jinak:
            Přidej první prvek z right do result
            Odeber první prvek z right
    Přidej zbývající prvky z left do result
    Přidej zbývající prvky z right do result
    Vrať result
MergeSort(A, startIndex, endIndex):
    // Pokud je v poli pouze jeden prvek, vrať
    if startIndex == endIndex:
        return

    middleIndex = (startIndex + endIndex) / 2

    // Seřaď levou polovinu pole
    MergeSort(A, startIndex, middleIndex)

    // Seřaď pravou polovinu pole
    MergeSort(A, middleIndex + 1, endIndex)

    // Sluč obě seřazená pole
    Merge(A, startIndex, endIndex)

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

    // Dočasné pole pro uložení seřazeného pole
    tempArray[]

    // Projdi obě poloviny pole
    for i in range(startIndex, endIndex+1):
        // Pokud je levá polovina hotová, přidej z pravé poloviny
        if leftIndex > middleIndex:
            tempArray[i] = A[rightIndex]
            rightIndex++

        // Pokud je pravá polovina hotová, přidej z levé poloviny
        else if rightIndex > endIndex:
            tempArray[i] = A[leftIndex]
            leftIndex++

        // Porovnej aktuální prvek a přidej menší prvek
        else if A[leftIndex] < A[rightIndex]:
            tempArray[i] = A[leftIndex]
            leftIndex++
        else:
            tempArray[i] = A[rightIndex]
            rightIndex++

    // Zkopíruj tempArray zpět do A
    for i in range(startIndex, endIndex+1):
        A[i] = tempArray[i]