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.
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.