Seçmeli sıralama algoritması, küçük boyutlu dizileri sıralarken veya dizinin bir bölümü sıralı ise yer değiştirme işlemi yapılmadığı için tercih edilir. Aksi durumlarda karmaşıklığı O(n2) olduğu için düşük performans gösterir.
Bu algoritma da dizinin ilk elemanı en küçük olarak kabul edilir, sonra dizi içerisindeki en küçük eleman aranır, bulunduğu zaman ilk eleman ile yer değiştirilir; daha sonra kalan elemanlar arasında ikinci en küçük eleman aranır ve ikinci elemanla yer değiştirilir. Bu işlem dizinin son elemanına kadar tekrar edildiğinde dizi küçükten, büyüğe doğru sıralanmış olur.
Selection sort algoritmasının çalışma şekli incelendiğinde dizinin aslında iki alt diziye ayrıldığı birinci bölümün sıralı öğelerden, ikinci bölümün ise sırasız öğelerden oluştuğu görülür. Algoritma çalışmaya devam ettiği sürece sıralı dizinin eleman sayısı artarken, sırasız dizinin eleman sayısı azalır.
Algoritmanın çalışma mantığını A={7, 3, -15, 40, 18, 2} dizisi üzerinde anlatmaya çalışalım. Resimde her adımda yer değiştiren dizi elemanları gri ile boyanarak gösterilmiştir.
Aşağıda seçmeli sıralama algoritmasının java ile yazılmış uygulamasını görebilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
public class SecmeliSiralama { public static void main(String[] args) { int []dizi={7,3,-15,40,18,2}; secmeliSirala(dizi); for (int i = 0; i < dizi.length; i++) System.out.print(dizi[i]); } public static int[] secmeliSirala(int [] dizi) { int n=dizi.length; int yedek; int minIndex; for(int i=0; i<n-1; i++) { minIndex=i; for(int j=i; j<n; j++) { if (dizi[j] < dizi[minIndex]) minIndex=j; } yedek=dizi[i]; dizi[i]=dizi[minIndex]; dizi[minIndex]=yedek; } return dizi; } } |
bu sort’u c# ta aynı mantık ile uygulamak mümkünmü