Kabarcık Tekniği ile Dizi Sıralama

Kabarcık Tekniği ile Dizi Sıralama (Buble Sort)

Dizi sıralamak için birçok algoritma bulunmaktadır, bunlardan en kolay anlaşılanı Buble Sort yani Kabarcık sıralamadır.  En hızlı sıralama algoritması QuickSort algoritmasıdır. Bu algoritmaya daha sonra fırsat bulduğumuzda değineceğiz.




Örneğin aşağıdaki sayılardan oluşan bir dizimiz olsun.

dizi = {10, 5, 11, 3, 25, 6} 

Aşağıdaki tabloya dikkat ettiğinizde adım adım en küçük sayının sağa doğru alındığını görürsünüz. Soldan başlayıp ikili karşılaştırmalar yaparak küçük eleman rastladığımızda yer değiştiriyoruz.

İlk önce en soldan 10'dan başlıyoruz, 10 ile 5'i karşılaştırıyoruz, "her zaman sağda  küçük olması gerek" prensibine göre 10 ile 5'de yer değiştirme yapmıyoruz. Ama sıra en küçük olan 5'e geçiyor. Sonra 5 ile 11'i karşılaştrıyoruz. küçük olan sağda olması gerektiğinden, 11 ile 5'i yer değiştiriyoruz. sonra 5 ile 3 ü karşılaştırıyoruz. Küçük olan 3 sağda olduğundan yer değiştirmiyoruz ama yola küçük olan 3 ile devam ediyoruz. Sonra, 3 ile 25 i karşılaştırıyor ve yer değiştiriyoruz.  Sonra 3 ile 6'yı karşılaştırıyoruz ve yer değiştiriyoruz. Artık bütün elemanlar karşılaştırıldı ve en küçük olan 3 bulundu.

Şimdi 3'ü yerinde bırakıp kalan kısım 10, 11, 5, 25, 6 kısmını aynı mantıkla karşılaştırıyoruz ve 5 en sağa geçiyor.  Bu adımlar bittikten sonra artık dizimiz sıralanmış oluyor.

10 5 11 3 25 6
10 5 11 3 25 6
10 11 5 3 25 6
10 11 5 3 25 6
10 11 5 25 3 6
10 11 5 25 6 3
           
10 11 5 25 6  
11 10 5 25 6  
11 10 5 25 6  
11 10 25 5 6  
11 10 25 6 5  
           
11 10 25 6    
11 10 25 6    
11 25 10 6    
11 25 10 6    
           
11 25 10      
25 11 10      
25 11 10      
           
25 11        
25 11        


İki değişkeni yer değiştirme işlemini bir programlama dilinde nasıl yaparsınız. Örneğin a ile b değerini yer değiştireceğiz: a=5, b=6 olsun. Sonuçta a=6 ve b=5 olmasını isteyelim. O zaman geçici bir değişkene aktarıp yer değiştiriyoruz.

gecici = b;
b= a;
a= gecici;

Bu durumda ilk önce gecici= b ile gecici = 6 oluyor, b= a ile b= 5 oluyor, sonra a= gecici ile a değeri 6 oluyor. Sonuçta; istediğimiz şekilde b=5 ve a=6 yapmış oluyoruz.


Programın tamamı aşağıdaki gibidir, iki döngü kullanarak sıralama işlemini küçükten büyüğe doğru sıraladık. 

using System;
 
namespace DiziSiralama
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] dizi = { 10, 5, 11, 3, 25, 6 };
            int[] siralidizi = new int[dizi.Length];
            int g;
 
            //Sıralamadan önce...
            foreach (int eleman in dizi)
            {
                Console.Write(eleman + " ");
            }
            Console.WriteLine("\n");
 
            //Sıralanıyor...
            for (int i=0; i<dizi.Length; i++)
            {
                for (int j = 0; j < dizi.Length; j++)
                {
                    if (dizi[i] > dizi[j])
                    {
                        g = dizi[j];
                        dizi[j] = dizi[i];
                        dizi[i] = g;
                    }
                }
            }
 
            //Sıralandıktan sonra...
            foreach(int eleman in dizi)
            {
                Console.Write(eleman + " ");
            }
 
        }
       
    }
}

Aşağıdaki ekran çıktısını görmektesiniz.


Diziyi küçükten büyüğe sıralamak için if (dizi[i] > dizi[j]) ifadesini tersine çevirmelisiniz.

Mutlu Kodlamalar,
Oğuzhan TAŞ
Nisan, 2015
Bookmark and Share