Bu makalemde sizlere sıralama algoritmalarından biri olan “Seçerek Sıralama (Selection Sort)” algoritmasından bahsedeceğim. Öncelikle algoritmanın tanımını yaptıktan sonra adım adım bir senaryo uygulayacağız.
Anlaşılması en kolay algoritmalardan bir tanesidir. Zaten kodunu okuyunca ne kadar basit olduğunu anlayacaksınız. Ben yine de her bir kod işleminin çıktısını resimlerle göstermeye çalıştım.
Bu algoritmada dizinin bir ucundan başlanır. Diğer uçtaki eleman sıralama için seçilen ilk değerdir. Bir ucundan diğer ucuna doğru her eleman için seçilen değer ile karşılaştırma yapılır. Eğer dizi elemanı seçilen değere göre aranan ise dizi elemanı, yeni seçilen değer olur. Dizinin kalan elemanları yeni seçilen değer ile karşılaştırılır.
Örneğin bir sayı dizisinde dizinin başından sonuna doğru küçükten büyüğe sıralama yapılmak istensin. Her döngüde dizinin sonundaki eleman, en küçük sayı kabul edilir. Dizinin başından sonuna kadar (son eleman hariç) tüm sayılar en küçük sayı ile karşılaştırılır. Eğer karşılaştırılan sayı daha küçükse artık bu dizi elemanı en küçük kabul edilir. Dizinin sonuna gelince dizinin ilk elemanı ile en küçük kabul edilen eleman yer değiştirir. Sonra dizinin 2 elemanından başlanarak aynı yöntem uygulanır. Eleman sayısının bir eksiği kadar bu döngü tekrarlanmış olur. Sonunda dizi sıralanmış olur.
Bazılarına göre bu algoritmanın tek bir olumlu yanı var . Eğer elaman gerçek yerinde ise yer değiştirme işlemine gerek olmaması. Kümenin karışıklığına göre bu fikir değişir. Bu durumu beklemek tabiki manasız. Ancak bazı durumlarda kümenin böyle bir durumda olduğunu öngörebilirsiniz. Örneğin elimizde sıralı bir dizi olsun. Biliyoruz ki bazı küçük işlemler dizinin sırasını bir miktar bozuyor. Bu dizinin sıralaması için bu algoritmayı kullanılabiliriz.
Basit bir kod parçası ile göstermek gerekirse;
Yukarıdaki örnekte bahsedildiği üzere algoritmanın gerçekleşmesi için 2 adet döngüye ihtiyaç vardır.
int[]? dizi = null; if (!isValid(out dizi)) return; if (dizi == null) return; int enkucuk; int index; //1. elemanından başlıyoruz. for (int i = 0; i <= (dizi.Length - 1); i++) { //son eleman en küçük kabul edilir. enkucuk = dizi[dizi.Length - 1]; index = dizi.Length - 1; for (int j = i; j < (dizi.Length - 1); j++)//daha küçüğü aranır { if (dizi[j] < enkucuk) { enkucuk = dizi[j]; index = j; } } dizi[index] = dizi[i]; dizi[i] = enkucuk; }
Bir dizide algoritmayı adım adım işletelim
Sıralanması nı istediğimiz dizi “9 4 5 3 2 1 8 6 7” olsun.
Dizimizin ilk hali
Her bir döngü için program çıktısı aşağıdaki resimlerde gösterildiği gibi olur.








Örnek uygulamaya aşağıdaki link ile erişebilirsiniz.