🤖
ROBOT KODLA
Öğrenmeye Başla →
🧩 Algoritma Başlangıç ⏱ Tahmini: 45 dk

Bubble Sort (Kabarcık Sıralaması) Algoritması: Çalışma Mantığı ve Kodları

Bubble Sort sıralama algoritması nedir? Zaman karmaşıklığı analizi, akış şeması, adım adım simülasyonu, optimize edilmiş C++ ve Python kodları.

📅 16 Ekim 2026•👁 1 kez görüntülendi•✅ Ücretsiz Ders

Bilgisayar bilimleri ve yazılım mühendisliğinde sıralama algoritmaları, veri yapılarının temel taşıdır. Karışık olarak verilmiş bir sayı veya metin listesini küçükten büyüğe (artan) ya da büyükten küçüğe (azalan) düzenlemek, arama algoritmalarının verimli çalışabilmesi için zorunlu bir ön adımdır. Sıralama algoritmaları dünyasına adım atan her öğrencinin ilk karşılaştığı ve çalışma mantığını en kolay görselleştirebildiği algoritma şüphesiz Bubble Sort (Kabarcık Sıralaması) algoritmasıdır. Bu kapsamlı rehberde, Bubble Sort'un bilimsel teorisinden zaman karmaşıklığına, adım adım dizi simülasyonundan C++ ve Python uygulamalarına kadar tüm inceliklerini keşfedeceksiniz.

1. Algoritmanın Amacı ve Günlük Hayat Analojisi

Bubble Sort algoritmasının adı, bir gazoz bardağındaki veya kaynayan sudaki hafif gaz kabarcıklarının yüzeye doğru yükselmesi metaforundan gelir. Dizideki büyük elemanlar, her geçişte komşusuyla karşılaştırılarak tıpkı bir kabarcık gibi listenin sonuna doğru adım adım "yükselir".

Temel Prensip:

Dizinin başından başlanır. Yan yana duran iki eleman karşılaştırılır:

  • Eğer soldaki eleman sağdaki elemandan büyükse, ikisinin yerleri değiştirilir (Swap).
  • Eğer soldaki eleman küçük veya eşitse, yer değiştirme yapılmaz ve bir sonraki çifte geçilir.
  • Dizi sonuna ulaşıldığında dizinin en büyük elemanı garantili olarak en sağdaki yerine oturmuş olur.
  • Bu işlem, dizideki tüm elemanlar sıralanana kadar tekrarlanır.
  • 2. Matematiksel Çalışma Prensibi ve Zaman Karmaşıklığı (Big-O Analizi)

    Bir algoritmanın verimliliği, girdi boyutu olan $n$ sayısı arttıkça harcadığı işlemci zamanı (zaman karmaşıklığı) ve bellek miktarı (alan karmaşıklığı) ile ölçülür.

    Big-O Performans Tablosu:

    SenaryoZaman KarmaşıklığıAçıklama
    En İyi Durum (Best Case)$O(n)$Dizi zaten tam sıralıysa, tek bir kontrolde durur (Optimize edilmiş versiyonda).
    Ortalama Durum (Average Case)$O(n^2)$Elemanlar rastgele dağılmışsa iç içe iki döngü çalışır.
    En Kötü Durum (Worst Case)$O(n^2)$Dizi tamamen tersten sıralıysa maksimum sayıda swap işlemi yapılır.
    Alan Karmaşıklığı (Space)$O(1)$Ekstra bellek gerektirmez, sıralamayı mevcut dizinin üzerinde (In-place) yapar.

    Toplam karşılaştırma sayısı matematiksel olarak ardışık sayıların toplamı formülüyle hesaplanır:

    $$\sum_{i=1}^{n-1} i = rac{n(n-1)}{2} = rac{n^2 - n}{2} pprox O(n^2)$$

    Bu durum, Bubble Sort'un 1.000 elemanlık bir dizide yaklaşık 500.000 işlem yapacağı, ancak 1.000.000 elemanlık devasa veritabanlarında işlemcinin kilitlenmesine neden olacağı anlamına gelir. Bu yüzden büyük verilerde Quick Sort veya Merge Sort tercih edilirken, eğitimde mantığı kavramak için Bubble Sort rakipsizdir.

    3. Adım Adım Dizi Simülasyonu

    Algoritmanın iç mekanizmasını kavramak için şu 5 elemanlı karışık diziyi ele alalım: `[5, 1, 4, 2, 8]`

    1. Geçiş (Pass 1):

  • `(5, 1)` karşılaştırılır: 5 > 1 olduğu için yer değiştirilir -> `[1, 5, 4, 2, 8]`
  • `(5, 4)` karşılaştırılır: 5 > 4 olduğu için yer değiştirilir -> `[1, 4, 5, 2, 8]`
  • `(5, 2)` karşılaştırılır: 5 > 2 olduğu için yer değiştirilir -> `[1, 4, 2, 5, 8]`
  • `(5, 8)` karşılaştırılır: 5 < 8, yer değişikliği yok -> `[1, 4, 2, 5, 8]`
  • *Sonuç:* En büyük sayı olan 8, dizinin en sonuna başarıyla yerleşti.

    2. Geçiş (Pass 2):

  • `(1, 4)` karşılaştırılır: 1 < 4, değişiklik yok -> `[1, 4, 2, 5, 8]`
  • `(4, 2)` karşılaştırılır: 4 > 2, yer değiştirilir -> `[1, 2, 4, 5, 8]`
  • `(4, 5)` karşılaştırılır: 4 < 5, değişiklik yok -> `[1, 2, 4, 5, 8]`
  • *Sonuç:* İkinci büyük sayı olan 5, doğru yerine ulaştı.

    3. Geçiş (Pass 3):

  • Dizi zaten sıralı hale geldi: `[1, 2, 4, 5, 8]`. Optimize edilmiş algoritmamız hiçbir swap işlemi olmadığını fark eder ve gereksiz döngüleri çalıştırmadan anında sonlanır!
  • 4. Algoritma Akış Şeması ve Mantıksal Adımları

    Bir programcı olarak kodu yazmadan önce algoritmanın mantıksal akış şemasını zihnimizde kurmalıyız:

    [BAŞLA] │ ▼
    [Diziyi Oku (n Eleman)] │ ▼
    [Dış Döngü: i = 0'dan n-1'e kadar] │ ▼
    [takas_oldu = False] │ ▼
    [İç Döngü: j = 0'dan n-i-1'e kadar] │ ├── [Dizi[j] > Dizi[j+1] mi?] ── EVET ──> [Swap(Dizi[j], Dizi[j+1])] ──> [takas_oldu = True] │ │ └── HAYIR ─────────────────────────────────────┘ │ ▼
    [İç Döngü Bitti mi?] │ ├── HAYIR ──> [Sonraki j'ye geç] │ └── EVET ──> [takas_oldu == False mi?] ── EVET ──> [Döngüyü Kır (Break)] ──> [Sıralı Diziyi Yazdır] ──> [BİTİR] │ └── HAYIR ──> [Sonraki i'ye geç]

    5. Tam ve Çalışan Kodlar

    Python ile Optimize Edilmiş Bubble Sort Uygulaması:

    def bubble_sort(arr): n = len(arr) # Dış döngü: Her adımda en büyük eleman sona oturur for i in range(n): swapped = False # Son i eleman zaten sıralandığı için (n - i - 1) kadar bakılır for j in range(0, n - i - 1): if arr[j] > arr[j + 1]: # Python'da pratik takas işlemi arr[j], arr[j + 1] = arr[j + 1], arr[j] swapped = True # Eğer iç döngüde hiçbir takas olmadıysa dizi sıralıdır, çık! if not swapped: break return arr # Test Verisi
    sayilar = [64, 34, 25, 12, 22, 11, 90]
    print("Orijinal Dizi :", sayilar)
    sirali = bubble_sort(sayilar)
    print("Sıralı Dizi :", sirali)

    C++ ile Bubble Sort Uygulaması:

    #include <iostream>
    #include <vector> void bubbleSort(std::vector<int>& arr) { int n = arr.size(); bool swapped; for (int i = 0; i < n - 1; ++i) { swapped = false; for (int j = 0; j < n - i - 1; ++j) { if (arr[j] > arr[j + 1]) { std::swap(arr[j], arr[j + 1]); swapped = true; } } if (!swapped) break; // Erken çıkış optimizasyonu }
    } int main() { std::vector<int> data = {64, 34, 25, 12, 22, 11, 90}; bubbleSort(data); std::cout << "Siralanmis C++ Dizisi: "; for (int x : data) std::cout << x << " "; std::cout << std::endl; return 0;
    }

    6. Bubble Sort'un Güçlü ve Zayıf Yönleri

    Avantajları:

  • Anlaşılması ve Kodlanması Çok Kolaydır: Algoritmik düşünceye giriş yapan her öğrenci mantığını 5 dakikada kavrayabilir.
  • Kararlı Bir Sıralamadır (Stable Sort): Aynı değere sahip iki elemanın orijinal sırasını bozmaz.
  • Ekstra Bellek Tüketmez (In-place): RAM kısıtı olan gömülü sistemlerde (Arduino Uno vb.) bellek tasarrufu sağlar.
  • Dezavantajları:

  • Büyük Verilerde Çok Yavaştır: $O(n^2)$ karmaşıklığı sebebiyle milyonlarca veriyi sıralamak dakikalar hatta saatler sürebilir.
  • Gereksiz Takas Sayısı: Elemanlar tek tek yanındakiyle takas edildiği için işlemci döngülerini fazla meşgul eder.
  • 7. Kendini Geliştirme Görevi (Challenge): Kokteyl Sıralaması

    Görev: Bubble Sort yalnızca soldan sağa doğru çalışır. Peki her geçişte bir kez soldan sağa, hemen ardından sağdan sola doğru çift yönlü tarama yaparsa ne olur? Bu algoritmaya Cocktail Shaker Sort (Kokteyl Sıralaması) denir. Yukarıdaki Python kodunu güncelleyerek çift yönlü çalışan bir kokteyl sıralayıcı yazmayı deneyin!

    Sonuç

    Bubble Sort, bilgisayar bilimleri tarihinin en klasik ve öğretici algoritmalarından biridir. Modern yüksek performanslı yazılımlarda yerini daha gelişmiş algoritmalara bıraksa da, sıralama mantığını, iç içe döngüleri ve optimizasyon kavramını öğrenmek için vazgeçilmez bir başlangıç noktasıdır. Sitemizdeki diğer [Algoritma Dersleri](/dersler) ve [Projeler](/projeler) ile kendinizi geliştirmeye devam edebilirsiniz!

    💡

    Bubble Sort (Kabarcık Sıralaması) Algoritması: Çalışma Mantığı ve Kodları Hakkında Sıkça Sorulan Sorular

    Bu dersle ilgili en çok merak edilen noktalar ve uzman yanıtları

    Bubble Sort (Kabarcık Sıralaması) Algoritması: Çalışma Mantığı ve Kodları dersini tamamlamak için hangi ön bilgilere ihtiyaç vardır?▼
    Bu ders Algoritma kategorisinde başlangıç ve orta seviye için tasarlanmıştır. Temel bilgisayar kullanımı ve ilgili donanım/yazılım ortamının kurulu olması yeterlidir. Önceden ileri düzey kodlama bilmeniz gerekmez; tüm adımlar devre şemaları ve açıklamalı kodlarla sunulmaktadır.
    Bu uygulamada devre bağlantısı yaparken en çok yapılan hata nedir?▼
    Ortak toprak (GND) hattının bağlanmaması, LED ve sensör bacaklarının ters kutupla takılması ya da pin numaralarının koddaki dijital/analog tanımlarla uyuşmaması en sık karşılaşılan durumlardır. Şemadaki pin numaralarını iki kez kontrol etmek sorunu çözer.
    Bubble Sort (Kabarcık Sıralaması) Algoritması: Çalışma Mantığı ve Kodları çalışmasını tamamladıktan sonra nasıl daha ileri bir seviyeye taşıyabilirim?▼
    Bu çalışmaya ek sensörler (kablosuz Bluetooth/Wi-Fi modülü, OLED ekran veya sesli buzzer uyarısı) entegre edebilir; verileri internet ortamına aktararak Nesnelerin İnterneti (IoT) tabanlı akıllı bir sisteme dönüştürebilirsiniz.

    Sorun mu yaşadınız veya aklınıza takılan bir nokta mı var?

    Discord topluluğumuza katılarak diğer geliştiriciler ve eğitmenlerle yardımlaşabilirsiniz.

    Discord'da Soru Sor →