En Basit Sıralama Algoritması
Bubble Sort, yan yana elemanları karşılaştırıp büyük olanı sağa taşıyan basit bir sıralama algoritmasıdır. Her geçişte en büyük eleman su içindeki kabarcık gibi "yukarı çıkar".
| Durum | Zaman | Açıklama |
|---|---|---|
| En İyi | O(n) | Dizi zaten sıralı (optimizasyonlu versiyon) |
| Ortalama | O(n²) | Rastgele sıralı dizi |
| En Kötü | O(n²) | Ters sıralı dizi |
| Alan | O(1) | In-place, ek bellek gerekmez |
n elemanlı dizi için:
• 1. geçiş: (n-1) karşılaştırma
• 2. geçiş: (n-2) karşılaştırma
• ...
• Toplam: (n-1) + (n-2) + ... + 1 = n(n-1)/2 ≈ n²/2 = O(n²)
def bubble_sort_basic(arr):
"""Temel Bubble Sort"""
n = len(arr)
comparisons = 0
swaps = 0
for i in range(n - 1):
print(f"\n--- Geçiş {i + 1} ---")
for j in range(n - 1 - i):
comparisons += 1
print(f"Karşılaştır: arr[{j}]={arr[j]} vs arr[{j+1}]={arr[j+1]}", end="")
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
swaps += 1
print(f" → TAKAS!")
else:
print(f" → OK")
print(f"Dizi: {arr}")
return comparisons, swaps
# Test
dizi = [64, 34, 25, 12, 22, 11]
print(f"Başlangıç: {dizi}\n")
karsilastirma, takas = bubble_sort_basic(dizi.copy())
print(f"\n{'='*40}")
print(f"Sonuç: {dizi}")
print(f"Toplam karşılaştırma: {karsilastirma}")
print(f"Toplam takas: {takas}")
def bubble_sort_optimized(arr):
"""
Optimizasyonlu Bubble Sort
Eğer bir geçişte hiç takas olmadıysa,
dizi zaten sıralıdır - erken çık!
"""
n = len(arr)
comparisons = 0
for i in range(n - 1):
swapped = False # Bu geçişte takas oldu mu?
for j in range(n - 1 - i):
comparisons += 1
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
swapped = True
print(f"Geçiş {i+1}: {arr}")
# Takas olmadıysa, dizi sıralı!
if not swapped:
print(f"✅ Takas yok - Erken çıkış!")
break
return comparisons
# Test 1: Normal dizi
print("Test 1: Normal Dizi")
dizi1 = [64, 34, 25, 12, 22, 11]
print(f"Başlangıç: {dizi1}")
comp1 = bubble_sort_optimized(dizi1)
print(f"Karşılaştırma: {comp1}\n")
# Test 2: Zaten sıralı dizi
print("Test 2: Zaten Sıralı Dizi")
dizi2 = [11, 12, 22, 25, 34, 64]
print(f"Başlangıç: {dizi2}")
comp2 = bubble_sort_optimized(dizi2)
print(f"Karşılaştırma: {comp2}")
print("\n💡 Sıralı dizide sadece 1 geçiş yeterli!")
Başlangıç: [5, 3, 8, 4, 2]
Geçiş 1 sonucu: [3, 5, 4, 2, 8] ← En büyük yerinde!
Geçiş 2 sonucu: [3, 4, 2, 5, 8]
... (devam eder)
Final: [2, 3, 4, 5, 8]
| Özellik | Bubble Sort | Selection Sort |
|---|---|---|
| Karşılaştırma Sayısı | O(n²) | O(n²) |
| Takas Sayısı | O(n²) - Çok | O(n) - Az |
| Stabil mi? | ✅ Evet | ❌ Hayır |
| Adaptive mi? | ✅ Evet (O(n)) | ❌ Hayır |