En Küçüğü Bul ve Başa Koy
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.
| Durum | Karşılaştırma | Takas |
|---|---|---|
| Her zaman | O(n²) | O(n) |
En fazla n-1 takas yapar (her geçişte sadece 1 takas). Takas maliyetli olduğunda (büyük objeler) tercih edilebilir.
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}")
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)