선택하여 정렬하는 알고리즘으로, 최소값을 선택하여 앞부터 채워나가는 정렬 방법
{5, 10, 2, 1, 17, 6 } 이란 배열이 주어졌을 때
1. 배열의 첫번째 자리(5)에서 시작
2. 가장 작은 원소 찾기 (5를 {10, 2, 1, 17, 6}에서의 최소값과 비교)
3. 1이 가장 작은 값이기 때문에 5의 위치와 교환
=> {1, 10, 2, 5, 17, 6}
=>첫번째 자리는 정렬된 상태, 두번째 이후는 정렬이 되지 않은 상태
4. 위의 과정을 정렬되지 않은 상태의 첫번째 자리부터 다시 반복
void selection_sort(int arr[], int n){
int least_id, temp;
// 마지막 숫자는 자동으로 정렬되기 때문에 (숫자 개수-1) 만큼 반복
for(int i=0; i<n-1; i++){
least_id = i;
// 최솟값을 탐색
for(int j=i+1; j<n; j++){ //비교 대상 i 보다 큰 i+1 부터 탐색
if(arr[j]<arr[least_id])
least_id = j;
}
// i 보다 작은 최솟값이 존재한다면 교환
if(i != least_id){
temp = arr[i];
arr[i] = arr[least_id];
arr[least_id] = temp;
}
}
}
< 시간 복잡도 계산 >
다음 표를 보면 (삽입정렬,선택정렬, 버블정렬)은
다른 정렬에 비해 비효율적이다는 것을 알수있다.
하지만 코드 구현이 간단하다는 장점이 있다.