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 :
insertion sort

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ı:
insertion sort

Kaynak kod ve makale linki için tıklayınız