Merge Sort este un algoritm de Sortare care folosește ca idee de baza Divide et Impera si Recursivitatea. Ideea de la baza acestei metode este sortarea celor 2 jumătăți de secvențe și interclasarea lor. Astfel, având în vedere că lungimile secvențelor se înjumătățesc constant, numărul de pași în adâncime pe care îi va face recursivitatea este maxim , iar toate interclasările vor duce la complexitatea finală n (dimensiunea șirului întreg). Astfel Merge Sort, cât și Quick Sort au complexitate medie de . Motivul pentru care Quick Sort este preferat peste Merge Sort este că Merge Sort folosește un vector auxiliar (în exemplu este folosit vectorul c[ ] ), deci complexitatea de spațiu este mai mare

void mergeSort(int st, int dr){
    if(st == dr)
        return;
    else{
        int mij = (st + dr) / 2;
        mergeSort(st, mij);
        mergeSort(mij + 1, dr);
        int inda = st, indb = mij + 1, indc = 0;
        while(inda <= mij && indb <= dr){
            if(a[inda] <= a[indb])
                c[indc++] = a[inda++];
            else
                c[indc++] = a[indb++];
        }
        while(inda <= mij)
            c[indc++] = a[inda++];
        while(indb <= dr)
            c[indc++] = a[indb++];
        for(int i = 1; i <= indc; ++i)
            a[st + i - 1] = c[i];
    }
}