Computer Science/Algorithm

Selection sort(선택 정렬)

해피단무지 2020. 8. 31. 17:09

- 최솟값 선택 정렬이라고 이해하면 쉬움
- key값을 포함해서 최소값을 찾고, 그 최소값이 key값이 아니면 key값과 swap함

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

void swap(int* a, int* b)
{
	int temp;
    temp = *a;
    *a = *b;
    *b = temp;
}
int selectionSort(int* arr, int size)
{
	int i, j;
    int idxMin;
    int key;
    
    for ( i = 0; i < size-1; i++ )
    {
    	key = arr[i];
        idxMin = i;
    	for ( j = i+1; j < size; j++ )
        {
        	if ( arr[idxMin] > arr[j] )
            	idxMin = j;
        }
        
        if (idxMin != i )
        	swap(&arr[i], &arr[idxMin]);
    }
    
    for ( i = 0; i < size; i++ )
    	printf("%d ", arr[i]);
}
int main(void)
{
	int size;
    int* arr;
    
    scanf("%d", &size);
    
    arr = (int *)malloc(sizeof(int)*size);
    
    for ( int i = 0; i < size; i++ )
    	scanf("%d", &arr[i]);
    
    selectionSort(arr, size);
    
    return 0;
}