🎯 7.3: Selection Sort (Seçmeli Sıralama)

En Küçüğü Bul ve Başa Koy

📌 Selection Sort Nedir?

Selection Sort, her adımda sıralanmamış bölümden en küçük elemanı bulup, sıralı bölümün sonuna ekleyen bir algoritmadır.

🎯 Algoritma Mantığı

  1. Dizinin sıralanmamış bölümünde en küçük elemanı bul
  2. Bu elemanı sıralanmamış bölümün ilk elemanıyla takas et
  3. Sıralı bölüm bir eleman büyür
  4. Tüm dizi sıralanana kadar tekrarla

🎮 İnteraktif Selection Sort Simülasyonu

Mevcut Pozisyon
Karşılaştırılan
Bulunan Minimum
Sıralanmış
🎯 "Başlat" butonuna tıklayarak sıralamayı izleyin.

📊 Karmaşıklık Analizi

Durum Karşılaştırma Takas
Her zaman O(n²) O(n)
💡 Selection Sort'un Avantajı:

En fazla n-1 takas yapar (her geçişte sadece 1 takas). Takas maliyetli olduğunda (büyük objeler) tercih edilebilir.

💻 Python Implementasyonu

Python Kodu
def selection_sort(arr):
    """
    Selection Sort Algoritması

    Her adımda en küçük elemanı bulup başa koyar.
    """
    n = len(arr)
    comparisons = 0
    swaps = 0

    for i in range(n - 1):
        # Minimum elemanın indeksini bul
        min_idx = i

        print(f"\n--- Adım {i + 1} ---")
        print(f"Aranan pozisyon: {i}")

        for j in range(i + 1, n):
            comparisons += 1
            if arr[j] < arr[min_idx]:
                min_idx = j
                print(f"  Yeni minimum bulundu: arr[{min_idx}] = {arr[min_idx]}")

        # Swap yap (eğer gerekirse)
        if min_idx != i:
            print(f"TAKAS: arr[{i}]={arr[i]} ↔ arr[{min_idx}]={arr[min_idx]}")
            arr[i], arr[min_idx] = arr[min_idx], arr[i]
            swaps += 1
        else:
            print(f"Takas gerekmedi, {arr[i]} zaten doğru yerde")

        print(f"Dizi: {arr}")

    return comparisons, swaps

# Test
dizi = [64, 25, 12, 22, 11]
print(f"Başlangıç: {dizi}\n")

comp, swap = selection_sort(dizi)

print(f"\n{'='*40}")
print(f"Sonuç: {dizi}")
print(f"Toplam karşılaştırma: {comp}")
print(f"Toplam takas: {swap}")
Çıktı bekleniyor...

⚠️ Selection Sort Stabil Değildir!

Örnek: Stabilite Problemi

Dizi: [(5, A), (3, B), (5, C), (2, D)] - değer ve etiket

Sıralama sonrası: [(2, D), (3, B), (5, C), (5, A)]

5'lerin sırası değişti! (A önce gelmeliydi ama C önce geldi)