CS/알고리즘
[알고리즘] 선택정렬(Selection Sort)
안드선생
2023. 2. 16. 15:11
반응형
선택 정렬
선택 정렬이란 제자리 정렬 알고리즘 중 한가지 방법이다.
보통 오름차순으로 정렬되는 선택 정렬은 다음과 같은 과정으로 이루어져 있다.
- 가장 작은 원소 값을 찾는다.
- 그 값을 맨 앞에 있는 값과 교체를 한다.
- 맨 처음 위치를 뺀 나머지 배열을 같은 방법으로 교체한다.
- 하나의 원소만 남을 때까지 위의 과정을 반복한다.
선택 정렬 예시
예시를 통해 좀 더 자세히 살펴보자.
위 그림과 같이, [5, 3, 8, 1, 2, 7] 로 구성된 배열이 있다고 하자.
- 앞에서부터 탐색하여, 가장 작은 원소 1을 찾은 후 맨 앞의 값 5와 교체한다.
- 1의 위치를 확정짓고 [3,8,5,2,7] 중 가장 작은 수 2를 맨 앞의 값 3과 교체한다.
- 같은 방법으로 [8,5,3,7] 중 가장 작은 수 3과 맨 앞의 값 8을 교체한다.
....
마지막 원소까지 같은 방법으로 진행하면
최종적으로 [1, 2, 3, 5, 7, 8] 이라는 정렬된 배열이 완성된다.
선택정렬 구현 및 시간복잡도 및 공간복잡도
void selectionSort(int[] arr) {
int indexMin, temp;
for (int i = 0; i < arr.length-1; i++) { // 1.
indexMin = i;
for (int j = i + 1; j < arr.length; j++) { // 2.
if (arr[j] < arr[indexMin]) { // 3.
indexMin = j;
}
} // 4.swap(arr[indexMin], arr[i])
temp = arr[indexMin];
arr[indexMin] = arr[i];
arr[i] = temp;
}
System.out.println(Arrays.toString(arr));
}
이 위의 코드처럼, 선택정렬은 데이터가 n 개일 때
첫번째 회전에서의 비교 횟수 : 1 ~ n-1 => n-1개
두번째 회전에서의 비교 횟수 : 2 ~ n-1 => n-2개
결국, n(n-1)/2개의 시간이 걸리게 되고
n개의 원소를 가진 배열을 정렬하는데 O(n^2) 만큼의 시간이 걸린다.
TIP
최선, 평균, 최악의 경우 시간복잡도는 O(n^2)로 동일하다.
선택정렬은 주어진 배열 안에서 교환을 통하여 정렬되는 제자리 정렬 이므로,
공간복잡도는 O(n) 이다.
선택 정렬의 장단점
장점
- 알고리즘이 단순하다.
- 정렬을 위한 비교 횟수는 많지만, 거품 정렬에 비해서 교환하는 횟수가 적기 때문에
많은 교환이 일어나야 하는 자료에서는 효율적이다. - 다른 메모리 공간이 필요하지 않는다.
단점
- 시간복잡도가 O(n^2)이므로 비효율적이다.
반응형