Menu
Coddy logo textTech

Kabarcık Sıralaması

Son güncelleme

Kabarcık sıralaması listeyi tekrar tekrar dolaşır, her komşu eleman çiftini karşılaştırır ve yanlış sıradaysalar onları takas eder. Her tam geçişten sonra kalan en büyük değer, doğru konumuna sona doğru "kabarmış" olur, bu yüzden her geçiş bir eleman daha az inceler. Karşılaştırmaları ve takasları izlemek için yukarıdan oynat'a basın ya da onları teker teker adımlayın.

Anlaşılması en kolay sıralama algoritmalarından biridir ve bu onu harika bir ilk algoritma yapar, ancak O(n²) çalışma süresi büyük girdiler için onu pratik olmaktan çıkarır.

Zaman ve alan karmaşıklığı

DurumKarmaşıklıkNotlar
En iyi durumO(n)Zaten sıralı, erken çıkış kontrolüyle
Ortalama durumO(n²)Rastgele sıra
En kötü durumO(n²)Ters sıralı
AlanO(1)Yerinde, yalnızca bir geçici değişken
KararlıEvetEşit elemanlar göreli sırasını korur

Adım adım

AdımNe olur
1Dizinin başından başlayın.
2Mevcut elemanı bir sonrakiyle karşılaştırın.
3Sırasızlarsa, onları takas edin.
4Bir konum sağa gidin ve sona kadar tekrarlayın (bir geçiş).
5Geçişleri tekrarlayın; her geçiş sonda bir eleman daha sabitler.
6Tam bir geçiş hiç takas yapmadığında durun.

Çözümlü örnek

[5, 2, 4, 1] sıralanıyor:

GeçişDiziEylem
1[2, 4, 1, 5]5,2, sonra 5,4, sonra 5,1 takas edilir; 5 sona kabarır.
2[2, 1, 4, 5]2,4 sıralı; 4,1 takas edilir; 4,5 sıralı; 4 artık yerleşti.
3[1, 2, 4, 5]2,1 takas edilir; geri kalan zaten sıralı; 2 yerleşti.
4[1, 2, 4, 5]Tam bir geçiş hiç takas yapmaz, bu yüzden dizi sıralanmıştır ve algoritma durur.

Kabarcık sıralaması ne zaman kullanılır

Şu durumda kullanınŞu durumda kaçının
Karşılaştırmalı sıralamaların nasıl çalıştığını öğretiyor veya öğreniyorsanızO(n²)'nin çok yavaş olduğu büyük girdileri sıralıyorsanız
Girdi çok küçük veya neredeyse sıralıysa (erken çıkışla O(n)'e yaklaşır)En hızlı genel amaçlı sıralamaya ihtiyacınız varsa - quicksort veya merge sort kullanın
Neredeyse hiç kod olmadan kararlı, yerinde bir sıralama istiyorsanızVeri rastgele sıradaysa ve performans önemliyse
Kısa bir listenin tek geçişte zaten sıralı olup olmadığını tespit ediyorsanızÇok sayıda yazma pahalıysa (ör. flash bellek); seçmeli sıralama daha az takas yapar

Bubble Sort kodu

Python, JavaScript, Java, C++, C dillerinde temiz ve çalıştırılabilir bir Bubble Sort uygulaması. Bir dil seçin, kodu kopyalayın veya Coddy Playground'da hazır yüklenmiş olarak açın.

Python ile Bubble Sort kodu

Python
1def bubble_sort(a):2    n = len(a)3    for i in range(n - 1):4        swapped = False5        for j in range(n - 1 - i):6            if a[j] > a[j + 1]:7                a[j], a[j + 1] = a[j + 1], a[j]8                swapped = True9        if not swapped:10            break  # no swaps means the list is already sorted11    return a12
13
14nums = [5, 1, 4, 2, 8]15print("Before:", nums)16bubble_sort(nums)17print("After: ", nums)
Bu kodu Python Playground'da çalıştır

Kabarcık Sıralaması SSS

Kabarcık sıralamasının zaman karmaşıklığı nedir?
Kabarcık sıralaması, iç içe döngüler nedeniyle ortalama ve en kötü durumlarda O(n²) sürede çalışır. Erken çıkış optimizasyonuyla zaten sıralı bir dizide O(n)'e ulaşabilir. O(1) ek alan kullanır.
Kabarcık sıralaması kararlı mıdır?
Evet. Kabarcık sıralaması komşu elemanları yalnızca kesin olarak sırasız olduklarında takas eder, bu yüzden eşit elemanlar birbirini asla geçmez ve orijinal göreli sıralarını korur.
Neden kabarcık sıralaması denir?
Her geçişte sıralanmamış en büyük değer, bir kabarcığın yüzeye yükselmesi gibi adım adım dizinin sonuna doğru hareket eder, bu yüzden "kabarcık" sıralaması denir.
Kabarcık sıralaması ile eklemeli sıralama arasındaki fark nedir?
İkisi de O(n²)'de çalışır, kararlı ve yerindedir, ancak veriyi farklı taşırlar: kabarcık sıralaması sırasız komşu çiftleri tekrar tekrar takas eder, eklemeli sıralama ise her elemanı alıp sıralı ön ekteki doğru yerine kaydırır. Eklemeli sıralama genellikle daha az yazma yapar ve pratikte, özellikle neredeyse sıralı veride, daha hızlı çalışır.
Quicksort yerine kabarcık sıralamasını ne zaman kullanmalıyım?
Gerçek iş yükleri için neredeyse hiçbir zaman - quicksort'un O(n log n) ortalama süresi, çok küçük girdiler dışında her şeyde kabarcık sıralamasının O(n²)'sini ezer. Kabarcık sıralaması yalnızca liste çok küçük veya neredeyse sıralıyken ya da öğretmek için mümkün olan en basit kararlı sıralamayı istediğinizde tercih edilmeye değer.
Erken çıkış optimizasyonu kabarcık sıralamasının en kötü durumunu değiştirir mi?
Hayır. Bir geçişin herhangi bir takas yapıp yapmadığını izlemek, kabarcık sıralamasının erken durmasını ve zaten sıralı girdide O(n)'e ulaşmasını sağlar, ancak ters sıralı bir dizi yine de her karşılaştırmaya ihtiyaç duyar, bu yüzden en kötü durum O(n²) olarak kalır. Optimizasyon yalnızca en iyi ve neredeyse sıralı durumlara yardımcı olur.
Coddy programming languages illustration

Coddy ile algoritmalarda ustalaş

BAŞLA