알고리즘/정렬

선택 정렬

Dero Lee 2021. 12. 24. 23:42
728x90

선택 정렬: 가장 작은 것을 반복적으로 선택하여 제일 앞으로 보내는 정렬 알고리즘.

 

정렬이 안된 숫자들 중에서 최소값을 선택하여 배열의 맨 앞쪽 요소와 교환한다.

 

Ex)

정렬할 데이터 :

 

1 10 5 8 7 6 4 3 2 9

1 2 5 8 7 6 4 3 10 9

1 2 3 8 7 6 4 5 10 9

1 2 3 4 7 6 8 5 10 9

~

1 2 3 4 5 6 7 8 9 10

 

시간복잡도 : O(N^2)

최악의 경우 연산의 횟수가 기하급수적으로 늘어나므로 비효율적인 정렬 알고리즘.

 

#include <stdio.h>
#include <limits.h> 
int main()
{
	int i, j, min, index, temp; 	// index : 가장 작은 원소가 존재하는 위치 
	int array[10] = {1, 10, 5, 8, 7, 6, 4, 3, 2, 9};
	for(i = 0; i<10; i++)
	{
		min = INT_MAX;
		for(j=i; j<10; j++)
		{
			if(min>array[j]) {
				min = array[j];
				index = j;
			}  
		}   
		temp = array[i];
		array[i] = array[index];
		array[index] = temp;
		// 반복적으로 가장 작은 값의 위치를 선택해서 앞으로 옮겨줌. 
	}
	for(i=0; i<10; i++)
	{
		printf("%d ", array[i]);
	}
	
	
	return 0;
}
728x90