Aralık 29th, 2009Sıralama Algoritmaları -1
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ı:
