Bölüm 20: İleri Sıralama Algoritmaları
Hazırlık
Başlamadan Önce
Dizi, gösterge, struct, fonksiyon ve dinamik bellek temellerini hatırla.
Quick sort ve Bölümleme
Pivot çevresinde küçük ve büyük öğeleri ayırmak.
Quick sort ne zaman O(n²) olur?
Giriş
Öğrenme Çıktıları
Pivot çevresinde küçük ve büyük öğeleri ayırmak.
İki sıralı yarıyı doğrusal zamanda birleştirmek.
Kökü sona taşıyıp heap boyutunu küçültmek.
Karşılaştırmalı sıralamada Ω(n log n) sınırını karar ağacıyla yorumlamak.
Temel Kavramlar
Hızlı sıralamalar problemi yapılandırır
Quick sort bölümlere ayırır, merge sort sıralı parçaları birleştirir, heap sort öncelik yapısını kullanır.
Yerinde ve pratikte hızlı; kötü pivot riski.
Kararlı ve garantili n log n; ek dizi ister.
Yerinde ve kötü durumda n log n; kararlı değildir.
Basamakları kararlı ara sıralamayla işler.
Temel Kavramlar
Kavram Haritası
Gösterim
Böl ve yönet ağacı
C ile Gerçekleştirim
Genel sıralama arayüzü
void quick_sort(int a[], int sol, int sag);
void merge_sort(int a[], int gecici[], int sol, int sag);
void heap_sort(int a[], size_t n);
void radix_sort(unsigned a[], size_t n);C ile Gerçekleştirim
C'de Bellek ve Sahiplik
Ayrılan belleği hangi yapı veya yordamın bırakacağını baştan belirle.
Yerel değişken adresini fonksiyon dışına taşırma; dinamik belleği gerektiği kadar yaşat.
Boyut, kapasite ve geçerli indisleri her işlemde koru.
NULL, boş yapı ve tek öğe durumlarını özellikle quick sortta eşit anahtarlarla sonsuz tarama riskiyle birlikte test et.
Temel İşlemler
Merge adımı
while (i <= orta && j <= sag)
tmp[k++] = (a[i] <= a[j]) ? a[i++] : a[j++];
while (i <= orta) tmp[k++] = a[i++];
while (j <= sag) tmp[k++] = a[j++];
for (i = sol; i <= sag; ++i) a[i] = tmp[i];Temel İşlemler
Kodu Okurken
Quick sort ne zaman O(n²) olur?
Her adımda quick kuralı korunuyor mu?
İki sıralı yarıyı doğrusal zamanda birleştirmek.
Merge sınırlarında bir öğeyi atlamak
Adım Adım
Quick sort bölümleme
Bir bölme elemanı belirle.
Pivotdan küçükler doğru tarafta kalana kadar ilerle.
Pivotdan büyükler doğru tarafta kalana kadar gerile.
Yanlış taraftaki öğeleri değiştir; alt dizileri özyineli sırala.
Sınıf Notu
Dersten Sesler
“Quick sort neden en hızlılardan biri? İşin sırrı bölümleme mantığında.”
“Yordamın iki mergesort satırını değiştirin; ortaya çıkan tabloyu gözlemleyin.”
Notlardaki sınıf içi anlatımdan, yazım ve uzunluk bakımından sunuma uyarlanmıştır.
Analiz
Karmaşıklık Özeti
| İşlem | Zaman | Ek bellek |
|---|---|---|
| Quick, ortalama | O(n log n) | O(log n) |
| Quick, kötü | O(n²) | O(n) |
| Merge | O(n log n) | O(n) |
| Heap | O(n log n) | O(1) |
| Radix | O(d(n+k)) | O(n+k) |
n: öğe sayısı · h: yükseklik · V: düğüm sayısı · E: kenar sayısı
Tasarım Kararı
Hangi Durumda Hangisi?
Genel amaçlı, yerinde ve iyi pivot stratejisiyle.
Kararlılık, bağlı liste veya dış sıralama gerektiğinde.
Kötü durum garantisi ve O(1) ek alan istendiğinde.
Sabit basamaklı tamsayı/dize anahtarlarında.
Dikkat
Sık Yapılan Hatalar
Alıştırmalar
Kendini Sına
- Quick sort ne zaman O(n²) olur?
- Merge sort neden kararlıdır?
- Heap sort neden ek dizi istemez?
- Radix sort hangi koşulda etkilidir?
- Karşılaştırmalı sıralamanın alt sınırı nedir?
Cevapları göster
- Bölümler sürekli çok dengesiz olduğunda.
- Birleştirmede eşitlikte soldaki öğeyi önce aldığı için.
- Heap dizinin kendi içinde tutulur.
- Basamak sayısı ve basamak alfabesi sınırlıysa.
- Ω(n log n).
Uygulama
Mini Laboratuvar
Quick sort ne zaman O(n²) olur?
Heap sort neden ek dizi istemez?
Karşılaştırmalı sıralamanın alt sınırı nedir?
Özet
Bölüm Özeti
Quick sort performansının kalbidir.
Merge sort garantili ve kararlıdır.
Alan, kararlılık ve anahtar yapısı seçimi belirler.
Özet
Kaynaklar ve Devam
- VYA2 sıralama bölümü: quick, merge, heap ve radix sort
- Horowitz, Sahni ve Anderson-Freed, Fundamentals of Data Structures in C.
- Kernighan ve Ritchie, The C Programming Language.
Son
← → veya boşluk ile gezinin · F: tam ekran · Home/End: ilk/son slayt