Aralık 30th, 2009Sıralama Algoritmaları -2
Araya Ekleme Sıralaması ( Insertion Sort )
Bu sıralamada yöntem diziyi ikiye bölüp sıralanmış ve sıralanmamış olarak ikiye bölmektir. Misal bir diziyi baştan başlayarak önce iki elemanı ele alınır bu şekilde dizi sanki n elemanlı değil de 2 elemanlı gibi düşünüp kendi arasında sıralama yapılır.
Sıralama işlemi bittikten sonra bir sonraki 3. eleman ele alınır ve dizi sanki 3 elemanlıymış gibi yine kendi arasında sıralanır işlem dizi boyutu kadar olucak şekilde (n) kez tekrar ederek sürer. Yapılan işlemi birde şekil üstünde işlemi görelim :

Sayılarımız 4,3,1,2,5
Önce 5 sayısı diziye yerleştirilir. Daha sonra 2 sayısı ve bunlar kendi aralarında sıralanır ve 2 sayısı yukarı kaydırılır. Daha sonra 1 sayısı eklenir dizi eleamanları tekrar sıralanır ve bir sayısı en yukarı kaydırılır bu işlem tüm dizi elemanları diziye eklenene kadar sürer.
Uygulama:
using System; // Araya eklemeli sıralama class demoInsert { public static string diziyiYazdır(int[] dizi) { string yazi=""; for(int indeks=0; indeks<dizi.Length; indeks++) { yazi += dizi[indeks]+" "; } return yazi; } public static int [] eklemeliSiralama(int[] dizi) { int gecici, eklenen; for ( int adım = 1; adım < dizi.Length; adım++) { eklenen = dizi[adım]; //dizinin ilk elemanını al gecici = adım; //indeks değerini gecici değişkeninde sakla while (gecici > 0 && dizi[gecici - 1] > eklenen) { //Eğer adım sayısı >0 ve dizinin n-1. elemanın değeri eklenen //Eklenen değerden büyükse dizi[gecici] = dizi[gecici - 1]; //n-1. elemanı sona kaydır gecici--; //indeks değerini 1 azalt.. } dizi[gecici] = eklenen; //Yeri değiştirilen elemanı diziye geçir.. Console.Write("Sıralanmakta olan dizi :{0}",diziyiYazdır(dizi)+"\n"); } return dizi; }//** static void Main() { int [] dizi=new int[10]; Random r=new Random(100); for (int indeks=0;indeks<dizi.Length ;indeks++ ) { dizi[indeks]=(int)(r.NextDouble()*50); }//for-loop end Console.Write("Sıralanmamış dizi : {0}",diziyiYazdır(dizi)+"\n"); Console.WriteLine(); eklemeliSiralama(dizi); Console.WriteLine(); Console.WriteLine("Sıralanmış dizi : {0}",diziyiYazdır(dizi)); Console.WriteLine(); }//main end }// class
Çıktı:
