Herkese selamlar, bugünkü konumuz BUBBLE SORT ALGORİTMASI NEDİR? elimden geldiğince anlatacağım. Eleştiriye her zaman açık biri olarak her insan gibi bende hata yapabilirim. konu altından saygı çerçevesinde dile getirirseniz bilgi alış-verişi/beyin fırtınası yapabilirim. :͛)͛
BUBBLE SORT ALGORİTMASI NEDİR ?Yalın bir sıra algoritması olarak karşımıza çıkan tanım Bubble Sort Algoritması Nedir? Sorusunun tam olarak karşılığıdır. Bu algoritmanın mantığı ise sıralanacak dizinde sürekli ilerleme olurken her defasında iki öğenin karşılaştırılmasında bu öğelerin yanlış yerde olmasına durumunda yerini değiştirilmesi yer alır. Herhangi bir değişiklik olmazsa algoritma dizinin başına dönene kadar kendini tekrarlar. Suyun altındaki kabarcıkların su üzerine çıkması gibi algoritma ile büyük olan sayılar dizinin üstüne ilerler. Üç temel özelliği ile kullanım alanlarında tercih edilir. Bunlar:
1.Yerinde sıralama
2.Kararlı sıralama
3.Basitlik
Bubble Sort Algoritması Nasıl Çalışır?
İlk etapta yer değiştirme sıralaması olarak bilinen bu algoritma, her adımından dizinin sonuna doğru doğrusal bir şekilde ilerler. Bu ilerlemede seçmeli sıralama algoritmasındaki değeri küçük olan elemanların dizinin başında kümelenmesi şeklinde çalışır. Çalışma mantığını şu şekilde açıklanabilir:
2, 6, 12, 8, 19, 16 şeklinde bir liste olsun.
Kabarcık sıralaması algoritmasına göre düzenleme yapılacak olursa ikili şekilde rakamları karşılaştırma yaparak sıralama sağlanır.
Önce 2 ile 6 ele alalım, 6 büyük olduğu için sonraki adıma geçilir. 6-12 sayılarında da 12 büyüktür. 12-8 adımında ise 8 küçüktür ve yer değiştirme sağlanır. 12-19 karşılaştırılır. 19 büyük olduğu için sonraki adıma geçilir. 19-16 karşılaştırmasında yer değiştirme yapılır.
Listenin son hali 2, 6, 8, 12, 16, 19 şeklinde tamamlanır. Tüm sıralama doğru olana kadar algoritma tekrarlanır. Tüm karşılaştırmalarda bir sonraki sayı büyük olduğunda işlem tamamlanmış olur.
Sadece kod olarak gösterimi ise şu şekilde olabilir:
procedure bubbleSort(A : sıralanabilir öğe dizisi ) defined as:
do
swapped := false
for each i in 0 to length(A ) - 2 do:
if A[ i ] > A[ i + 1 ] then
swap(A[ i ], A[ i + 1 ] )
swapped := true
end if
end for
while swapped
end procedure <
Bubble Sort Algoritması Avantajları ve Dezavantajları?
Bir liste içinde tekrar tekrar ilerleyen Bubble Sort, bitişik elemanları karşılaştırır. Yanlış sırada olanların yerini değiştirir. Basit karşılaştırma tabanlı sıralama algoritması olarak tanımlanan bu algoritma yeni programlama öğrenenler ve basit uygulama görevleri için oldukça avantajlı sonuçlar sağlar. Bu avantajları şu şekilde sıralayabiliriz:
- Sade olması: anlaşılır olması ve uygulanması oldukça pratik olan bu algoritma; takas işlemlerinde, algoritmik düşünmede ve sıralama temellerinin öğrenilip uygulanmasında tercih edilir.
- İstenilen alanda uygulanabilir. Giriş dizininin yanında sadece O (1) ek bellek ihtiyacı olacaktır. Tüm değişimler yerinde yapılır.
- Kullanılacak alanda eşit elemanlar var ise göreceli sıralama korunmuş olur. Özellikle istikrarın önemli olduğu durumlarda kullanışlı bir seçim olacaktır.
- Küçük optimizasyonlara uyarlanabilir. Geçiş sırasında erken durdurma bayrağı ekleyebilir, bu şekilde işlem hangi kısımda ise sıralı girdiler için kodu uyarlanabilir hale getirebilirsiniz. Zaten sıralı olan listelerde ise o
zamanında çalışmış olacaktır.
- Küçük kod boyutu ile çok yer kaplamaz. Açıklayıcı ve sınırlı bağlamlarda oldukça kullanışlı olan Bubble Sort Algoritması kısa ve basit bir döngü yapısına sahiptir.
Avantajları olduğu kadar dezavantajları da olabilir. Karşınıza çıkabilecek dezavantajları da şu şekilde sıralayabiliriz:
- Ortalama ve kötü durumlarda zaman karmaşıklığı oldukça düşüktür. Özellikle kötü durumlarda o (n^2) olan değer daha büyük dizilerde n birkaç pinden büyük olabilir. Bu durum pratikliğin önüne geçer.
- Büyük veri kümeleri için verimli olmayabilir. Daha hızlı algoritmalarla karşılaştırıldığında gereksiz yer değiştirmeler ve karşılaştırmalar gereksiz zaman kaybettirir.
- Yüksek takas maliyeti vardır. Sıkça kullanılan eleman değişimi sonrasında ek yük ortaya çıkar.
- Yüksek performans için ön bellek ya da dallanma dostu değildir. Tekrar tekrar yaşanan ardışık takaslar optimize edilebilen algoritmalara göre daha az verimli bellek erişim modelleri ortaya çıkarır.
- Üretimlerde çok az kullanılır. Mikro optimizasyonlarda, eğitim amaçlı örneklerde ya da küçük dizilerde tercih edilse de daha kapsamlı algoritmalarda ya da kütüphane sıralamalarında fonksiyonları değiştirilebilir.
Bubble Sort Algoritması Ne Zaman Kullanılır?
Kabarcık sıralaması dizinin başından itibaren çalışmaya başlar. Dizi elemanlarını sıra ile seçer. Seçilen eleman var olan dizi elemanından büyük ise yerleri değiştirilir. İşlem sonrasında en büyük dizi elemanı en sona gelecektir. Bu basit işleyiş kapsamlı projeler için dezavantajlı olsa da pek çok alanda verimli bir şekilde kullanılabilir. Bunları şu şekilde sıralayabiliriz:
- Temel sıralama algoritmaları ve kavramlarının analizlerinin öğrenilmesinde kullanılabilir.
- Uygulama pratikliğinin performanstan daha çok olduğu küçük dizilerde tercih edilebilir.
- Daha az kodla yerinde ve istikrarlı bir sıralama gerektiren durumlarda avantajlı sonuçlar sağlayabilir.
Bubble Sort Algoritmasının Zaman ve Alan Karmaşıklığı?
Veri bilimciler bir sıralama algoritması için hem performansını hem de ne kadar zaman/ alan gerektirdiğini anlamaları önemlidir. Pek çok seçenek olduğu için özel durumunuza göre en iyi sıralama algoritması seçilmelidir. Zaten artan sırada olan bir dizinde kabarcık sıralama algoritması tüm diziyi yalnızca bir kez tarama yapar. Bu durum en iyi durum senaryosudur. Bu durum pratikte her zaman karşınıza çıkmaz. Bu algoritma ile sıralanmış bir dizi elde etmek için çoğunlukla n(n-1)/2 tane karşılaştırma gereklidir. En kötü zaman karmaşıklığı ise O(n2)olmaktadır. Genel olarak verilen dizideki çift sayı kadar dizi taraması yapılır. Çalışmanızda zaman önemli bir faktör olursa kabarcık algoritması yerine farklı seçenekler önerilebilir. Zaman karmaşıklığını şu üç başlıkta sıralayabiliriz:
- En kötü durum zaman karmaşıklığı: O(n2)
- Ortalama zaman karmaşıklığı: O(n2)
- En iyi durum karmaşıklığı O
( bu durumda dizi zaten sıralıdır)
Alan karmaşıklığında ise sadece elemanları ile birlikte değiştirildiği ve depolama yapılmadığı için bu algoritmayı çalıştırmak için ek bir alan ihtiyacı olmaz. Bu durumda alan karmaşıklığının sabit olduğu ya da O(1) şeklinde tanımlanabilir. Bu durumlarda girdiği doğrudan değiştirdiği için yerinde bir algoritma olarak tercih edilecektir.
Diğer Sıralama Algoritmaları ile Bubble Sort Algoritması Karşılaştırması?
Projelerinizde hangi sıralama algoritmasını kullanacağınıza karar vermek için Bubble Sort karşılaştırılması önemlidir. Ne zaman daha uygun olduğunu anlamak için şu şekilde karşılaştırmalar incelenebilir:
Diğer Sıralama Algoritmaları ile Bubble Sort Algoritması Karşılaştırması?
Projelerinizde hangi sıralama algoritmasını kullanacağınıza karar vermek için Bubble Sort karşılaştırılması önemlidir. Ne zaman daha uygun olduğunu anlamak için şu şekilde karşılaştırmalar incelenebilir:
- Selection sort ile benzer yapıya sahiptir. Ancak Selection sort daha az değiştirme yapmaktadır. Bu nedenle bazı projeler için daha hızlı sonuçlar sağlayabilir.
- Merge sort daha büyük veri setlerinde kabarcık algoritmasına göre daha hızlıdır. Ancak Merge sort daha karmaşık bir algoritmadır.
Basitliği ve kolay anlaşılabilir olması nedeni ile eğitim amaçlı kullanımı oldukça popülerdir. Büyük veri setlerinde yavaşlığından dolayı tercih edilmeyebiliyor. Çoğunlukla temel sıralama işlemleri için kullanılır. Özellikle algoritmik düşünme yeteneği kazandırma hedefi olan çalışmalarda, sürecin nasıl çalıştığının anlaşılması için ideal bir seçimdir.
Bugünkü konumuz bu kadardı okuyan herkese teşekkür ederim. Bir başka konuda görüşmek üzere saygıyla ve sevgiyle kalın....
Bugünkü konumuz bu kadardı okuyan herkese teşekkür ederim. Bir başka konuda görüşmek üzere saygıyla ve sevgiyle kalın....

