Selection Sort

Kategori: C , 02 Temmuz 2019 , JanFranco


Selection sort algoritması basit ama etkili bir sıralama algoritmasıdır. İlk olarak dizinin ilk elemanı minimum eleman olarak seçilir. Daha sonra dizi baştan sona, minimum sayı için dolaşılır. Bulunan minimum eleman ile ilk seçilen eleman yer değiştirilir. Daha sonra index bir artırılarak bir sonraki eleman seçilir. Aynı işlemler tekrarlanır. Rastgele 100 elemanlı bir diziyi selection sort kullanarak sıralayalım:


#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define N 100

void selection_sort(int arr[]){
    int i, j, min_index, temp;
    for(i=0; i<N-1; i++){
        min_index = i;
        for(j=i+1; j<N; j++){
            if(arr[j] < arr[min_index]){
                min_index = j;
            }
        }
        temp = arr[min_index];
        arr[min_index] = arr[i];
        arr[i] = temp;
    }
}

void print_array(int arr[]){
    int i;
    for(i=0; i<N; i++){
        printf("%d\n", arr[i]);
    }
}

int main() {

    int arr[N], i;
    srand(time(NULL));

    for(i=0; i<N; i++){
        arr[i] = rand() % N;
    }

    printf("Before sorting:\n");
    print_array(arr);
    selection_sort(arr);
    printf("After sorting:\n");
    print_array(arr);

    return 0;
}
Her bir iteration'da ne olduğunu görmek için kodu biraz değiştirelim:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define N 10

void selection_sort(int arr[]){
    printf("Before sorting:\n");
    print_array(arr);
    int i, j, min_index, temp;
    for(i=0; i<N-1; i++){
        min_index = i;
        for(j=i+1; j<N; j++){
            if(arr[j] < arr[min_index]){
                min_index = j;
            }
        }
        temp = arr[min_index];
        arr[min_index] = arr[i];
        arr[i] = temp;
        printf("\n%d. iteration\n", i);
        print_array(arr);
    }
}

void print_array(int arr[]){
    int i;
    for(i=0; i<N; i++){
        printf("%d  ", arr[i]);
    }
}

int main() {

    int arr[N], i;
    srand(time(NULL));

    for(i=0; i<N; i++){
        arr[i] = rand() % N;
    }

    selection_sort(arr);

    return 0;
}
Programın çıktısı:

Before sorting:
1  9  8  0  3  1  9  1  8  4
0. iteration
0  9  8  1  3  1  9  1  8  4
1. iteration
0  1  8  9  3  1  9  1  8  4
2. iteration
0  1  1  9  3  8  9  1  8  4
3. iteration
0  1  1  1  3  8  9  9  8  4
4. iteration
0  1  1  1  3  8  9  9  8  4
5. iteration
0  1  1  1  3  4  9  9  8  8
6. iteration
0  1  1  1  3  4  8  9  9  8
7. iteration
0  1  1  1  3  4  8  8  9  9
8. iteration
0  1  1  1  3  4  8  8  9  9


Sonraki Yazı: Quick Sort
Yorumlar

Henüz bir yorum bulunmuyor.
Yorum bırakın