Sortowanie przez scalanie (ang. merge sort) to algorytm sortowania, który stosuje podejście dziel i zwyciężaj. Został odkryty przez Johna von Neumanna i doskonale sprawdza się przy sortowaniu dużych zbiorów danych. Działa poprzez rekurencyjne dzielenie tablicy wejściowej na mniejsze podtablice i sortowanie tych podtablic, a następnie ponowne ich scalanie w celu uzyskania posortowanej tablicy.
Mówiąc prościej – proces sortowania przez scalanie polega na podzieleniu tablicy na dwie połowy, posortowaniu każdej połowy, a następnie ponownym połączeniu posortowanych połówek. Proces ten jest powtarzany, aż cała tablica zostanie posortowana.
Złożoność czasowa: O(n log(n))
Złożoność pamięciowa: O(n)
Kroki algorytmu:
- Dziel: Dzielenie tablicy rekurencyjnie na dwie połowy, aż do momentu, w którym nie będzie już możliwości dalszego podziału.
- Sortuj: Każda podtablica jest sortowana indywidualnie za pomocą algorytmu sortowania przez scalanie.
- Scal: Posortowane podtablice są ponownie łączone w posortowanej kolejności.
Działanie algorytmu

Implementacja algorytmu sportowania przez scalanie w Pythonie:
def merge_sort(arr): if len(arr) > 1: mid = len(arr) // 2 # utworz tablice tymczasowe left = arr[:mid] right = arr[mid:] # rekurencyjne sortowanie obu czesci tablicy merge_sort(left) merge_sort(right) # dwa iteratory do przechodzenia przez dwie połówki i = 0 j = 0 # iterator dla glownej tabeli k = 0 # polacz ponownie tablice tymczasowe while i < len(left) and j < len(right): if left[i] <= right[j]: arr[k] = left[i] i += 1 else: arr[k] = right[j] j += 1 k += 1 # skopiuj pozostale wartosci while i < len(left): arr[k] = left[i] i += 1 k += 1 while j < len(right): arr[k] = right[j] j += 1 k += 1 arr_to_sort = [54,26,93,17,77,31,44,55,20] merge_sort(arr_to_sort) print(arr_to_sort)