2. Seçmeli Sıralama (Selectıon sort)

1. SELECTION SORT ANLATIM

Selection sort listedeki en küçük elemanı bulup ( 1 ) ,  en küçük sayıyla baştaki sayıyı yer değiştirir. Daha sonra tekrar en küçük sayıyı arar ancak bu sefer en başa attığı sayıya bakmaz yani 2. elemandan (1. indexten ) itibaren aramaya başlar.

5 , 7 , 2 , 9, 6 , 1, 3 , 7    (en küçük 1)

1 , 7 , 2 , 9, 6 , 5, 3 , 7    (en küçük 2)

1 , 2 , 7 , 9, 6 , 5, 3 , 7    (en küçük 3)

1 , 2 , 3 , 9, 6 , 5, 7 , 7    (en küçük 5)

1 , 2 , 3 , 5, 6 , 9, 7 , 7    (en küçük 5)

1 , 2 , 3 , 5, 6 , 9, 7 , 7    (en küçük 6)

1 , 2 , 3 , 5, 6 , 9, 7 , 7    (en küçük 7)

1 , 2 , 3 , 5, 6 , 7,9 , 7    (en küçük 7)

1 , 2 , 3 , 5, 6 , 7,7 ,   (en küçük 7)

2. ALGORITMA ANALIZI

WORTS CASE : TERSTEN SIRALI DİZİ  ilk olarak n elemana bakar sonra (n-1) sonra (n-2)  :  [ n*(n+1) ] / 2 = n^2  (Growth rate’de çarpılan ve toplanan değerlerin önemi yok).
BEST CASE : SIRALI DİZİ sıralı olduğunu anlaması için yine dizinin sonuna kadar gitmeli :  n^2

WORST = BEST

3. SELECTION SORT C# IMPLEMENTASYONU

public static void SelectionSort(List<double> arr)
 {
   int n = arr.Count;
  
    for(int i = 0; i < n - 1; i++)  //List boyutu kadar dönen bir for döngüsü.
    {
      int min_idx = i;  //ilk indexi tutar. (i)
    
       for (int j = i + 1; j < n; j++) //tuttugu indexten sonraki(i+1) en küçüğünü arar.
        if (arr[j] < arr[min_idx])
         min_idx = j;   //en küçük olanın konumu alınır.

      double temp = arr[min_idx];  //en küçük sayı geçiçiye atılır
      arr[min_idx] = arr[i];  //en küçük sayının index konumuna en baştaki atanır.
      arr[i] = temp;  //en başa da en küçük sayı.
    }
 }