Kabarcık Sıralaması
Komşu elemanları karşılaştırarak diziyi sıralayan basit algoritma.
#Nasıl çalışır?
Kabarcık sıralaması (bubble sort), diziyi baştan sona tekrar tekrar gezerek yan yana duran iki elemanı karşılaştırır. Soldaki sağdakinden büyükse ikisinin yerini değiştirir.
Her geçişin sonunda henüz sıralanmamış kısımdaki en büyük eleman, sudaki bir kabarcık gibi dizinin sonuna doğru yükselir ve kalıcı yerine oturur. Algoritma adını buradan alır.
Bir geçiş boyunca hiç yer değiştirme olmazsa dizi sıralanmış demektir ve algoritma erken durabilir.
#Canlı animasyon
Oynat'a bas ya da adım adım ilerle. Her adımda komşu iki eleman karşılaştırılır.
for i = 0 to n - 2swapped = falsefor j = 0 to n - i - 2if a[j] > a[j + 1]swap(a[j], a[j + 1]); swapped = trueif not swapped: break
#Adım adım
- 01Dizinin başından başla ve ilk iki elemanı karşılaştır.
- 02Soldaki eleman sağdakinden büyükse ikisinin yerini değiştir.
- 03Bir sağa kay ve sıradaki komşu çifti karşılaştır; sona gelene kadar devam et.
- 04Geçiş bittiğinde en büyük eleman en sağa yerleşmiştir. Bir sonraki geçişte bu elemana artık bakma.
- 05Bir geçişte hiç yer değiştirme olmayana ya da sıralanacak eleman kalmayana kadar tekrarla.
#Örnek kod
Aynı algoritma 8 dilde. Her program derlenip çalıştırılarak test edildi ve hepsi aynı çıktıyı veriyor.
def bubble_sort(a: list[int]) -> None:
n = len(a)
for i in range(n - 1):
swapped = False
# After pass i, the last i elements are already in place.
for j in range(n - i - 1):
if a[j] > a[j + 1]:
a[j], a[j + 1] = a[j + 1], a[j]
swapped = True
if not swapped: # no swaps: already sorted
break
numbers = [5, 1, 4, 2, 8, 3]
bubble_sort(numbers)
print(*numbers)#Karmaşıklık
| En iyi | O(n) |
|---|---|
| Ortalama | O(n²) |
| En kötü | O(n²) |
| Ek bellek | O(1) |
| Kararlı mı? | Evet |
| Yerinde mi? | Evet |
En iyi durum O(n), dizi zaten sıralıyken ve erken durma (swapped bayrağı) kullanıldığında geçerlidir. Tek bir geçişte n-1 karşılaştırma yapılır. Ters sıralı bir dizide yaklaşık n²/2 karşılaştırma ve aynı sayıda yer değiştirme gerekir.
#Ne zaman kullanılır?
Bubble sort öğrenmek için mükemmeldir: karşılaştırma, yer değiştirme ve döngü değişmezi (loop invariant) kavramlarını çok net gösterir. Gerçek projelerde ise büyük veride yavaş kalır; bunun yerine merge sort, quick sort ya da dilin hazır sort fonksiyonu tercih edilir. Çok küçük veya neredeyse sıralı dizilerde hâlâ makul çalışabilir.
#Alıştırma
Soruları cevaplamak ve ilerlemeni kaydetmek için giriş yap.
Kolay
Bubble sort her geçişte ne yapar?
- 1Komşu elemanları karşılaştırıp gerekirse yer değiştirir
- 2Diziyi ikiye böler
- 3Ortadaki elemanı pivot seçer
- 4Elemanları hash tablosuna koyar
Bubble sort en kötü durumda hangi zaman karmaşıklığına sahiptir?
- 1O(n)
- 2O(n log n)
- 3O(n²)
- 4O(log n)
Bubble sort kararlı (stable) bir algoritma mıdır?
- 1Evet
- 2Hayır
Orta
[5, 1, 4, 2] dizisinde ilk geçişten sonra dizi nasıl görünür?
- 1[1, 4, 2, 5]
- 2[1, 2, 4, 5]
- 3[1, 5, 4, 2]
- 4[4, 1, 2, 5]
Zor
Bir geçişte hiç yer değiştirme olmazsa durarak (swapped bayrağı) zaten sıralı dizide en iyi durum karmaşıklığı nedir?
- 1O(n)
- 2O(n²)
- 3O(n log n)
- 4O(1)