Kabarcık Sıralaması ( Bubble Sort )

Dotnet dil ailesi ne kadar hazır sıralama sınıflarını bize hazır olarak verse de iyi bir programcı temel algoritmaları bilmelidir. Bu yazı dizisi biraz uzun olacak. Başlıca sıralama algoritmaları şunlardır:

1)       Kabarcık Sıralaması ( Bubble Sort)

2)       Araya ekleme Sıralaması ( Insertion Sort )

3)       Birleşmeli Sıralama (  Merging Sort )

4)       Kümeleme Sıralama ( Heap Sort )

5)       Hızlı Sıralama ( Quick Sort )

6)       Seçmeli Sıralama ( Selection Sort )

7)       Radix Sort

8)       Shell Sort

Sırayla başlayalım bu yazıda Kabarcık Sıralamasını ( Bubble Sort ) görücez.

Kabarcık sıralaması adını denizdeki dalgaların hareketlerinden almıştır. Dizi artan bir sıralanma şeklini alır (küçükten büyüğe doğru ).  Sıralama işlemi iki komşu elemanın karşılaştırılıp yer değiştirilmesine dayanır. Misal 10 elemanlı bir dizi baştan başlanarak komşu elemanlar birbirleri ile karşılaştırılır ve yer değiştirilir. Birinci tur sonunda elemanlar (dizi uzunluğu-1) kez yer değiştirir. İlk tur sonunda dizinin en büyük elemanı en sona gider. Bu işlem dizi uzunluğundan bir eksik sayı kadar tekrarlanır ( ikili karşılaştırma yapıldığı için).

Uygulama :

    using System;
    class kabarcikSıralama
    {
    	static void Main(string[] args)
    	{
			int [] dizi=new int[5];//5 elemanlı bir dizi oluştur.
 
			Random r=new Random(100);// Rasgele sayı oluştur
 
			for (int indeks=0;indeks<dizi.Length ;indeks++ )
			{
			//Oluşturulan sayıları diziye aktar	
			dizi[indeks]=(int)(r.NextDouble()*50);
			}
 
    		Console.WriteLine("Sıralanmadan Önce: {0}\n",diziyiYazdır(dizi));
 
    		int[] sıralanmısDizi = KabarcikSıralama(dizi);//Diziyi Sırala
    		Console.WriteLine("Toplam {0} adımda sıralama tamamlandı. ",dizi.Length-1);
		Console.WriteLine(); // Bir satır alt geç
    		Console.WriteLine("Sıralanma Sonucu: {0}",diziyiYazdır(sıralanmısDizi));
    	}// main end
 
 
 
    	public static int [] KabarcikSıralama(int[] dizi)
    	{
    		// Kabarcik Sıralaması
    		int turSayisi,elemanSayisi,gecici;
    		for(turSayisi = dizi.Length-1; turSayisi>=0; turSayisi--)
    		{
    			for (elemanSayisi = 1; elemanSayisi <= turSayisi; elemanSayisi++)
    			{
					//Komşu eleman ile karşılaştırma işlemi yapılıyor
    				if (dizi[elemanSayisi-1] > dizi[elemanSayisi])
    				{	//Eğer komşu eleman daha büyükse 
    					gecici = dizi[elemanSayisi-1];
						//gecici değişkenine büyük eleman aktarılıyor
    					dizi[elemanSayisi-1] = dizi[elemanSayisi];//
		//büyük elemanın bulunduğu yere küçük eleman yazılıyor
		//bu noktada büyük eleman ile küçük olan yer değiştiriyor.
    					dizi[elemanSayisi] = gecici;
						//gecici değişkenindeki büyük eleman
						//dizinin sonuna yollanıyor
    				}
	Console.Write(" {0}. Adım ",elemanSayisi);
	Console.WriteLine("Adım Adım Sıralanma işlemi : {0}",diziyiYazdır(dizi));
    			}
			Console.WriteLine("******************");
 
    		}
 
 
    		return dizi;
    	}// KabarikSıralama End
 
		public static string diziyiYazdır(int[] dizi) 
    	{
    		string yazi="";
 
 
    		for(int indeks=0; indeks<dizi.Length; indeks++) {
 
				yazi += dizi[indeks]+" ";
    		}
    		return yazi;//diziyi döndür
    	}
 
    }// Class End

İşte bu kadar bir sonraki yazıda Araya ekleme Sıralaması ( Insertion Sort ) incelicez. Her ne kadar kullandığımız dotnet framework bize sıralama işlemleri için hazır sınıflar versede gün gelir dotnet efsanesi biter ve dotnet’ten size sadece sınıf isimleri hatıra kalır.

Çıktı:
Çıktı

Kaynak Kod,Exe ve Makalenin doc formatı için tıklayınız