프로그래밍 불여일타!!의 프로젝트의 일환으로, 퇴근후 배깔고 하는 알고리즘 공부를 시작!! 그 결과물로 간단 간단한 알고리즘을 작성하고, Blog에 올리기로 했습니다.
오늘은 간단하게 Selection Sort를 만들어 보았습니다.
* 원리는 : 총 1...n개의 정렬 되지 않은 요소에서, 첫번째 놈을 가져다가 가장 작은 값을 가진다라 가정 하고 나머지 n-1개와 비교를 하게 합니다. 그래서 그중 가장 작은 녀석을 기억 하고 있다가, 1번째 자리와 바꿉니다. 그리고 index을 하나 더 증가 해서 두번째 요소를 가지고 n-2 만큼 loop를 돌아서 다시 최소값을 찾고 바꿔 줍니다. 이렇게 반복하면 정렬이 됩니다.( 사실 그림으로 보면 아무것도 아닙니다. 그림은 귀찮아서 안그렸습니다.)
* 성능 : O(N^2)
* 코드
void swap( int *a, int *b ) { int dump = *a; *a = *b; *b = dump; }
void SelectionSort( int *_arrayBuffer, const unsigned int _arraySize ) { for( int i = 0; i < _arraySize; i++ ) { int nMinIndex = i; for( int j = i + 1; j < _arraySize; j++ ) { if( _arrayBuffer[j] < _arrayBuffer[nMinIndex] ) { nMinIndex = j; } } swap( _arrayBuffer[nMinIndex], _arrayBuffer[ i ] ); } }