Birləşdirmə çeşidləməsi "böl və hökm sür" alqoritminin klassik nümunəsidir: massivi yarıya bölürük, yarıları rekursiv çeşidləyirik və iki çeşidlənmiş yarını O(n) vaxtda birləşdiririk. İş vaxtı hər halda O(n log n)-dir, dayanıqlıdır, lakin O(n) əlavə yaddaş tələb edir. Rekursiya ağacları üçün bax: böl və hökm sür.

5 2 4 7 1 3 2 6 üçün birləşdirmə çeşidləməsi
5 2 4 7 1 3 2 6 üçün birləşdirmə çeşidləməsi

İki çeşidlənmiş siyahının birləşdirilməsi

Hər iki siyahının başına baxırıq və kiçik elementi nəticəyə köçürürük. Bir siyahı qurtaranda digərinin qalığını əlavə edirik: o, artıq çeşidlənib. Bu, O(n + m) vaxt aparır. Bərabərlikdə sol siyahıdan götürürük, buna görə birləşdirmə dayanıqlıdır.

python
def merge(left, right):
    out = []
    i = j = 0
    while i < len(left) and j < len(right):
        if left[i] <= right[j]:
            out.append(left[i])
            i += 1
        else:
            out.append(right[j])
            j += 1
    out += left[i:]
    out += right[j:]
    return out

print(merge([1, 4, 7], [2, 3, 9]))
print(merge([], [5]))
print(merge([(1, "a"), (2, "a")], [(1, "b"), (2, "b")]))
text
[1, 2, 3, 4, 7, 9]
[5]
[(1, 'a'), (1, 'b'), (2, 'a'), (2, 'b')]

Rekursiv birləşdirmə çeşidləməsi

0 və ya 1 elementli siyahı artıq çeşidlənib. Əks halda siyahını yarıya bölürük, yarıları çeşidləyirik və birləşdiririk.