Insertion Sort (Eklemeli Sıralama) Algoritması

Selamün Aleyküm Arkadaşlar;

Eklemeli sıralama algoritmasının nasıl olduğuna örnek vermek gerekirse:

Elimizde 6 tane sayı olsun. Bunlar 156, 34, 53, 6, 1, 10 olsun. Bunları küçükten büyüğe doğru sıralayalım.

İlk önce ikinci sayı alınıp bir önceki sayıyla (156) karşılaştırılır. Eğer ikinci sayı (34) birinci sayıdan küçükse yerleri değiştirilir.

Şuan sayı sıramız şu şekilde oldu. (34, 156, 53, 6, 1, 10)

Sonra üçüncü sayı (53) bir önceki sayılarla (34, 156) karşılaştırılır. Hangi sayıdan küçükse o sayıyla yer değiştirir. (34, 53, 156, 6, 1, 10)

Sonra dördüncü sayı (6) diğer önceki sayılarla (34, 53, 156) karşılaştırılır hangisinden küçükse onunla yer değiştirir. (6, 34, 53, 156, 1, 10)

Sonra beşinci sayı (1) diğer önceki sayılarla (6, 34, 53, 156) karşılaştırılır hangisinden küçükse onunla yer değiştirir. (1, 6, 34, 53, 156, 10)

Sonra son sayı (10) diğer önceki sayılarla (1, 6, 34, 53, 156) karşılaştırılır hangisinden küçükse onunla yer değiştirir. Ve sıralama işlemi tamamlanır.

1, 6, 10, 34, 53, 156

Bu işlemde iki döngünün yer aldığını görmekteyiz. Birinci döngü sayıyı seçiyor. İkinci döngü ise bir önceki sayılar etrafında dönüyor ve seçilen sayı diğer önceki sayılarla karşılaştırılıyor.

Bir dizimizde bu sayıları tutalım.

int[] dizi = new int[]{156, 34, 53, 6, 1, 10};

Bu sayıları teker teker seçmek için bir döngüye ihtiyacımız var. Bu döngü index 0 dan o dizinin uzunluğuna kadar dönmelidir.

int[] dizi = new int[]{156, 34, 53, 6, 1, 10};

for (i = 0; i < dizi.Length; i++){
//diziden sırasıyla eleman seçme
}

Şimdi ise seçtiğimiz elemandan bir önceki elemanları karşılaştırmamız için bir döngü yazmalıyız. Bu döngü seçtiğimiz elemandan geriye doğru gitmeli. Index numarası seçtiğimiz elemanın indeksine eşit olarak başlamalı ve index numarası 0’den büyük olduğu sürece devam etmelidir. Çünkü bir önceki elemanın indeksi -1 olamaz.

int[] dizi = new int[]{156, 34, 53, 6, 1, 10};

for (i = 0; i < dizi.Length; i++){
	for(j = i; j > 0; j--){
		//Seçilen elemanın önceki elemanlarla karşılaştırılması
	}
}

dizi[j] ile elemanımızı seçip dizi[j – 1] ile bir önceki elemanla karşılaştırabiliriz. Küçükten büyüğe doğru sıraladığımız için dizi[j] < dizi[j – 1] olmalıdır. Eğer bu şartı sağlarsa elemanların değerlerini değiştirmeliyiz. Bunun için diğer elemandaki veriyi bir değişkende tutup değiştirmeliyiz.

int[] dizi = new int[]{156, 34, 53, 6, 1, 10};

for (i = 0; i < dizi.Length; i++){
	for(j = i; j > 0; j--){
		if(dizi[j] < dizi[j - 1]){
			int temp = dizi[j];
			dizi[j] = dizi[j - 1];
			dizi[j - 1] = temp;
		}
	}
}

Proje dosyasını buradan indirebilirsiniz.

 

Hayırlı günler, sağlıcakla kalın.

Bu döküman www.ibasoglu.com’a aittir. Kaynak belirtmek suretiyle alıntı yapılabilir.