Selection Sort (Seçmeli Sıralama) Algoritması

Selamün Aleyküm Arkadaşlar;

Seçme sıralama algoritması ilk sayının seçilip sonra diğer sayılarla karşılaştırılmasıdır. Sonra ikinci sayı, üçüncü sayı seçilip devam eder.

78, 321, 12, 9, 45 sayılarını büyükten küçüğe doğru seçmeli sıralama algoritmasıyla sıralayalım.

İlk önce 1. sayı (78) seçilir. Sonra diğer sayılarla karşılaştırılarak içlerinde en büyük sayı (321) bulunur ve seçilen sayı (78) yer değiştirir. (321, 78, 12, 9, 45)

Sonra ikinci sayı (78) seçilir sonraki diğer sayılarla karşılaştırılır ve içlerinden en büyük sayı (78) ile yer değiştirir. (321, 78, 12, 9, 45)

Sonra üçüncü sayı (12) seçilir sonraki diğer sayılarla karşılaştırılır ve içlerinden en büyük sayı (45) ile yer değiştirir. (321, 78, 45, 9, 12)

Sonra dördüncü sayı (9) seçilir sonraki diğer sayılarla karşılaştırılır ve içlerinden en büyük sayı (12) ile yer değiştirir.

321, 78, 45, 12, 9

Böylelikle büyükten küçüğe sıralama işlemi tamamlanmış olur.

Burada dikkat edilirse iki döngü bulunmaktadır. Biri sayı seçip diğeri en büyük sayıyı bulmaktadır. Seçilen sayının döngüsü sayının uzunluğu – 1 kadar gitmektedir. Yani 5 sayıdan 4’ü seçilmektedir. En büyük sayının bulunması döngüsü ise seçilen sayının indeksi + 1 ve sayının uzunluğuna kadar gitmektedir.

İlk önce sayılarımızı bir dizide tanımlayalım.

int[] dizi = new int[]{78, 321, 12, 9, 45};

Şimdi seçme işlemi için döngümüzü uzunluk – 1’e kadar yazalım.

int[] dizi = new int[]{78, 321, 12, 9, 45};

for(int i = 0; i < dizi.Length - 1; i++){
//Sayı seçme döngüsü
}

İkinci for işleminde seçilen sayı sonraki sayılarla karşılaştırılır ve en büyük sayı bulunur. Burada dikkat etmemiz gereken nokta en büyük sayı ile seçilen sayının yer değiştirmesi olayıdır. Bunun için bulunan en büyük sayının nerede olduğunu bilmemiz gerekir. Bunun için en büyük sayının bulunduğu index numarasını almalıyız. Sonrada seçilen sayı ile bulunan en büyük sayı yer değiştirir.

int[] dizi = new int[]{78, 321, 12, 9, 45};

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

	int temp = dizi[i];
	dizi[i] = dizi[enbuyukindex];
	dizi[enbuyukindex] = 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.