Algoritmalar

Birleştirmeli Sıralama

Sıralama O(n log n) O(n)

Diziyi özyinelemeli olarak ikiye böler, her yarıyı sıralar, sonra iki sıralı yarıyı birleştirir.

en fazla 16 sayı (0–999)
Boşta
23
7
41
15
3
34
9
28

8 eleman üzerinde Merge Sort başlıyor.

DeğişmezBirleştirilen iki yarı da zaten sıralı, dolayısıyla iki baştan küçük olan kalan en küçük değerdir.

1/57
karşılaştırma0hareket0lo0mid0hi0
merge-sort.c
void merge(int arr[], int lo, int mid, int hi) {
int n1 = mid - lo + 1, n2 = hi - mid;
int L[n1], R[n2];
for (int i = 0; i < n1; i++) L[i] = arr[lo + i];
for (int j = 0; j < n2; j++) R[j] = arr[mid + 1 + j];
int i = 0, j = 0, k = lo;
while (i < n1 && j < n2)
arr[k++] = (L[i] <= R[j]) ? L[i++] : R[j++];
while (i < n1) arr[k++] = L[i++];
while (j < n2) arr[k++] = R[j++];
}
void mergeSort(int arr[], int lo, int hi) {
if (lo >= hi) return;
int mid = lo + (hi - lo) / 2;
mergeSort(arr, lo, mid);
mergeSort(arr, mid + 1, hi);
merge(arr, lo, mid, hi);
}

Birleştirmeli Sıralama nasıl çalışır?

Diziyi ikiye böl, her yarıyı özyinelemeli sırala, sonra iki sıralı yarıyı öndeki küçük elemanı ala ala birleştir. Asıl iş birleştirmede olur.

En iyi durum

Her zaman O(n log n) — bölme/birleştirme yapısı veriye bağlı değildir.

En kötü durum

Yine O(n log n), ama birleştirme için O(n) ek alan gerekir.

Ne zaman kullanılır?

Kararlı sıralama, bağlı listeler, belleğe sığmayan veriler (dış sıralama) ve garanti sınırlar.