선택정렬 (Selection Sort)
작동방식
- 정렬해야 하는 값에서 임시최솟값[최댓값]을 정한다(보통 첫번째 값을 할당함)
- 반복문을 돌면서 정렬되지 않은 값과 비교하면서 진짜 최솟값[최댓값]을 찾는다
- 진짜최솟값의 위치가 파악되면 임시최솟값의 위치와 맞바꾼다
- (반복) 정렬한 값을 제외하고 다시 최솟값[최댓값]의 위치를 찾는다
특징
- 정렬해야 하는 값 중에서 다음 최솟값[최댓값]을 찾아 정렬하는 방식
- 좌측[우측]부터 순서대로 정렬된다
- 버블정렬과 마찬가지로 n제곱만큼 수행된다
- 버블정렬에 비해 요소간 자리이동하는 작업이 적기 때문에 실제효율은 버블정렬보다 좋다
예시
[ 1, 14, 9, 6, 2, 19, 4, 7 ] 와 같은 숫자집합이 있을때 아래와 같은 순서로 정렬된다.
1 2 9 6 14 19 4 7
1 2 4 6 14 19 9 7
1 2 4 6 7 19 9 14
1 2 4 6 7 9 19 14
1 2 4 6 7 9 14 19
구현코드 - Java
int[] intArr = {1, 14, 9, 6, 2, 19, 4, 7};
int i, j, min;
//a- 바깥쪽 반복문
for(i=0; i<intArr.length-1; i++){
min = i;
//b- 안쪽 반복문
for(j=i+1; j<intArr.length; j++){
//c- 최솟값[최댓값] 찾기
if(intArr[j] < intArr[min]){
min = j;
}
}
//d- 요소간 이동작업
int temp = intArr[min];
intArr[min] = intArr[i];
intArr[i] = temp;
}
- a- 바깥쪽 반복문
- b- 안쪽 반복문
- c- 최솟값 혹은 최댓값을 찾는다.
- d- 요소간 자리를 맞바꾸어 정렬이 이루어진다. 버블정렬에 비해 불필요한 이동작업이 적다
'데이터구조와 알고리즘 > 개념정리' 카테고리의 다른 글
정렬 알고리즘4 - 셸 정렬(Shell Sort) (0) | 2021.08.22 |
---|---|
정렬 알고리즘3 - 삽입정렬(Insertion Sort) (0) | 2021.08.20 |
정렬 알고리즘1 - 버블정렬(Bubble Sort) (0) | 2021.08.20 |
데이터구조 - Queue 큐 (0) | 2021.08.19 |
데이터구조 - 트리 (0) | 2021.08.19 |