1 dk, tahmini okuma süresi
Kabarcık sıralama (bubble sort), muhtemelen bir sıralama algoritması oluştururken aklınıza gelebilecek en basit sıralama yöntemidir. Buradaki fikir, sıralanmış bir dizimiz olana kadar bitişik öğeleri tekrar tekrar sıralayan algoritma oluşturmak.
Kabarcık sıralama muhtemelen ilk öğrendiğim ve bundan daha iyisini yapabileceğimizi düşündüğüm algoritmaydı. En hızlı algoritma olmayabilir ama yine de bilmek ve anlamak önemli diye düşünüyorum. Bu algoritmayı öğrenmenin en iyi nedenlerinden biri de, görünüşe göre en çok sorulan mülakat sorularından biri olması.
Yukarıda açıklandığı gibi, dizi sıralanana kadar dizi döngülerle diziyi tarıyoruz. Bu algoritma için iki döngüye (iç içe) ihtiyacımız var. İlk döngüde baştan sona gideceğiz ve ikincisinde baştan dizinin uzunluğu eksi bir eksi ilk döngünün indeksi n-1-i'ye gideceğiz. Bu önemlidir çünkü dizimizdeki her zaman en büyük değeri buluyoruz ve son dizine taşıyoruz (tabii ki minimumdan maksimuma sıralıyorsak). Böylece ikinci döngünün her sonlanışında en büyük değeri dizinin sonuna taşıyoruz ve onlarla işimiz bittiği için artık bu değerleri kontrol etmemize gerek yok.
Ok, I know this is more than enough text for an algorithm this simple. We can start with the code now, I wrote it in python because I like to practice algorithms with python and I believe it's much easier than alternatives (such as Java) :
Tamam, bu açıklamanın bu kadar basit bir algoritma için fazlasıyla yeterli olduğunu biliyorum. Şimdi kodlamaya başlayabiliriz. Kodu python ile yazdım çünkü python ile çalışmayı seviyorum ve alternatiflerden (Java gibi) çok daha kolay olduğuna inanıyorum:
def bubbleSort(arr, n):
for i in range(n): # Diziyi tara
for j in range(0, n-i-1): # Sıralanmamış parçaları tara
# Her yinelemede, yerlerini değiştirerek mevcut maks'ı en sona taşıyın.
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
if __name__ == "__main__":
arr = [2, 3, 5, 1, 7, 6, 4]
length = len(arr)
bubbleSort(arr, length)
print(arr)
Gördüğümüz gibi, bu algoritma kesinlikle çoğu durumda en hızlı sıralama algoritması kesinlikle değildir. İç içe döngü ve temel olarak diziden n * n kez geçmesi nedeniyle en kötü durumumuz O(N²). Bu algoritma için bir yardımcı diziye ihtiyacımız olmayacak, bu nedenle uzay (yer) karmaşıklığımız sabit (O(1)).
Belki bu algoritmayı zamanınız varken ama yeriniz olmadığında düşünün.
Öğrenmeye devam edin!
Ilker Akbiyikİçindekiler