Bölüm 19: Temel Sıralama Algoritmaları

Selection, insertion, bubble ve counting sort
KarşılaştırmaSelectionInsertionBubbleCountingKararlılık
C ile Veri Yapıları · İki ciltlik ders notları temel alınmıştır

Hazırlık

Başlamadan Önce

C ön bilgisi

Dizi, gösterge, struct, fonksiyon ve dinamik bellek temellerini hatırla.

İlk kavram

Karşılaştırma ve Selection

Bu bölümün hedefi

Her turda kalan en küçüğü seçip yerine koymak.

Başlangıç sorusu

Selection sort kaç takas yapar?

Giriş

Öğrenme Çıktıları

Selection sort izlemek

Her turda kalan en küçüğü seçip yerine koymak.

Insertion sort uygulamak

Yeni öğeyi sıralı ön ek içinde doğru yere kaydırmak.

Bubble sort iyileştirmek

Takas yapılmayan turda erken sonlandırmak.

Counting sort seçmek

Anahtar aralığı küçükse karşılaştırmasız sıralama yapmak.

Temel Kavramlar

Sıralama seçimi veri dağılımına bağlıdır

Aynı O(n²) sınıfındaki algoritmalar bile sıralıya yakın veri, takas sayısı ve kararlılık açısından farklı davranır.

Selection

Az takas, her durumda çok karşılaştırma.

Insertion

Sıralıya yakın veride çok hızlı.

Bubble

Komşu takaslarla büyükleri sona taşır.

Counting

Anahtar aralığını ek bellek olarak kullanır.

Temel Kavramlar

Kavram Haritası

1Karşılaştırma
2Selection
3Insertion
4Bubble
5Counting
6Kararlılık
Aynı O(n²) sınıfındaki algoritmalar bile sıralıya yakın veri, takas sayısı ve kararlılık açısından farklı davranır.

Gösterim

İlk iki insertion turu

0712293541
2 eklenince [2,7,9,5,1]; 9 zaten doğru yerde. Sıralı ön ek her tur bir öğe büyür.

C ile Gerçekleştirim

Sıralama yordamı sözleşmesi

typedef int (*Karsilastir)(const void *, const void *);
void insertion_sort(int a[], size_t n);
void selection_sort(int a[], size_t n);
void bubble_sort(int a[], size_t n);
Tür tanımı veri yapısının bellekteki biçimini; yordamlar ise bu yapı üzerindeki davranışı kurar.

C ile Gerçekleştirim

C'de Bellek ve Sahiplik

Sahip kim?

Ayrılan belleği hangi yapı veya yordamın bırakacağını baştan belirle.

Yaşam süresi

Yerel değişken adresini fonksiyon dışına taşırma; dinamik belleği gerektiği kadar yaşat.

Sınırlar

Boyut, kapasite ve geçerli indisleri her işlemde koru.

Boş durum

NULL, boş yapı ve tek öğe durumlarını özellikle en küçük değeri değil indisini tutmamak riskiyle birlikte test et.

Temel İşlemler

Insertion sort

for (size_t i = 1; i < n; ++i) {
    int anahtar = a[i];
    size_t j = i;
    while (j > 0 && a[j - 1] > anahtar) {
        a[j] = a[j - 1]; --j;
    }
    a[j] = anahtar;
}
Kod örnekleri C99/C11 uyumlu olacak biçimde küçük ve tek sorumluluklu tutulmuştur.

Temel İşlemler

Kodu Okurken

Ön koşul

Selection sort kaç takas yapar?

Değişmez

Her adımda selection kuralı korunuyor mu?

Son koşul

Yeni öğeyi sıralı ön ek içinde doğru yere kaydırmak.

Hata yolu

Insertion'da anahtarı kaydırmadan önce korumamak

Adım Adım

Selection sort bir tur

Başla

Sıralanmamış bölgenin ilk indisini en küçük kabul et.

Tara

Kalan öğeleri karşılaştır ve en küçüğün indisini tut.

Takas

Bulunan en küçüğü bölgenin başıyla değiştir.

Sınırı ilerlet

Sıralı ön ek bir öğe büyür.

Sınıf Notu

Dersten Sesler

“Dizi sıralıysa hemen çıkacak şekilde daha dikkatli kodlanabilir.”
“Küçük girdiler yanıltıcı olabilir; belli bir noktadan sonra artışın nasıl patladığına bakın.”

Notlardaki sınıf içi anlatımdan, yazım ve uzunluk bakımından sunuma uyarlanmıştır.

Analiz

Karmaşıklık Özeti

İşlemZamanEk bellek
SelectionO(n²)O(1)
Insertion, en iyiO(n)O(1)
Insertion, kötüO(n²)O(1)
Bubble, iyileştirilmiş en iyiO(n)O(1)
CountingO(n+k)O(k)

n: öğe sayısı · h: yükseklik · V: düğüm sayısı · E: kenar sayısı

Tasarım Kararı

Hangi Durumda Hangisi?

Selection

Yazma/takas maliyeti yüksekse.

Insertion

Küçük veya neredeyse sıralı dizilerde.

Bubble

Öğretim ve yerel takas davranışı için; üretimde nadiren.

Counting

Tamsayı anahtar aralığı küçük ve biliniyorsa.

Dikkat

Sık Yapılan Hatalar

1En küçük değeri değil indisini tutmamak
2Insertion'da anahtarı kaydırmadan önce korumamak
3Bubble dış sınırını her tur daraltmamak
4Counting sortta negatif/aralık dışı anahtarı hesaba katmamak

Alıştırmalar

Kendini Sına

  1. Selection sort kaç takas yapar?
  2. Insertion sort ne zaman O(n)'dir?
  3. Bubble sort erken nasıl biter?
  4. Counting sort neden karşılaştırmalı değildir?
  5. Kararlı sıralama ne demektir?
Cevapları göster
  1. En fazla n-1.
  2. Dizi zaten sıralı veya sıralıya çok yakınsa.
  3. Bir turda hiç takas yapılmazsa.
  4. Anahtarları sayaç dizisine doğrudan indisler.
  5. Eşit anahtarlı kayıtların göreli sırasını korur.

Uygulama

Mini Laboratuvar

1 · Çiz

Selection sort kaç takas yapar?

2 · Kodla

Bubble sort erken nasıl biter?

3 · Ölç

Kararlı sıralama ne demektir?

Teslim: küçük bir C modülü, üç uç test ve zaman/bellek karmaşıklığı tablosu.

Özet

Bölüm Özeti

Aynı sınıf, farklı davranış

Veri düzeni ve yazma maliyeti önemlidir.

Insertion küçükte güçlü

Sıralıya yakın veri avantaj sağlar.

Aralık küçükse say

Counting sort O(n+k) sunar.

Özet

Kaynaklar ve Devam

Son

Bölüm 19: Temel Sıralama Algoritmaları
Ders planına dön
1 / 1 C ile Veri Yapıları

← → veya boşluk ile gezinin · F: tam ekran · Home/End: ilk/son slayt