Yığın Sıralaması
Sıralama O(n log n) O(1)Bir maksimum yığın kurar, sonra kökü tekrar tekrar sona taşıyıp küçülen öneki yeniden yığınlaştırır.
23
7
41
15
3
34
9
28
8 eleman üzerinde Heap Sort başlıyor.
DeğişmezMevcut indeksin altındaki her alt ağaç heap özelliğini zaten sağlıyor, bu yüzden tek düğümü aşağı süzmek yeterli.
1/61
karşılaştırma0takas0size8i0largest0
heap-sort.c
void heapify(int arr[], int n, int i) {int largest = i;int l = 2 * i + 1, r = 2 * i + 2;if (l < n && arr[l] > arr[largest]) largest = l;if (r < n && arr[r] > arr[largest]) largest = r;if (largest != i) {int tmp = arr[i];arr[i] = arr[largest];arr[largest] = tmp;heapify(arr, n, largest);}}void heapSort(int arr[], int n) {for (int i = n / 2 - 1; i >= 0; i--)heapify(arr, n, i);for (int i = n - 1; i > 0; i--) {int tmp = arr[0];arr[0] = arr[i];arr[i] = tmp;heapify(arr, i, 0);}}
Yığın Sıralaması nasıl çalışır?
Dizi üzerinde bir maksimum yığın kur; sonra kökü (en büyüğü) son elemanla takas edip yeni kökü küçülen önek üzerinde aşağı süz.
En iyi durum
Her zaman O(n log n); yığın kurma tek başına O(n).
En kötü durum
Yine O(n log n) — veriye bağlı kötüleşme yok, O(1) ek alan.
Ne zaman kullanılır?
Yerinde ve garantili O(n log n) gerektiğinde (gerçek zamanlı / düşmanca girdiler), kararlılık önemsizse.