선택 정렬은 제자리 정렬(in-place sorting) 알고리즘의 하나이다.
제자리 정렬 : 입력 배열(정렬되지 않은 값들) 이외에 다른 추가 메모리를 요구하지 않는 정렬 방법
해당 순서에 원소를 넣을 위치는 이미 정해져 있고, 어떤 원소를 넣을지 선택하는 알고리즘이다. 즉, 자료를 넣을 자리를 먼저 선택하고 그 자리에 오는 값을 찾는다.
오름차순을 기준으로 정렬한다
1. 주어진 배열에서 최소값을 찾는다.
2. 찾은 최소값을 가장 앞 인덱스에 위치한 값과 교체한다.
3. 맨 처음 위치를 뺀 나머지 리스트를 같은 방법으로 교체한다.
4. 하나의 원소만 남을 때까지 위 과정을 반복한다. (마지막에 남은 원소는 최대값이고, 자동으로 가장 끝에 위치하게 된다.)
- 1회전에서 첫 번째 인덱스에 최소값을 넣는다.
- 2회전에서 두 번째로 작은 값을 두 번째 인덱스에 넣는다.
- n회전에서 n번째로 작은 값이 n번째 인덱스에 위치하게 된다.
public int[] SelectionSort(int n, int[] arr){
// n = 6 , arr = {13, 5, 11, 7, 23, 15}
int index = 0;
for(int i=0; i<n-1; i++) {
int min = Integer.MAX_VALUE;
for(int j=i; j<n; j++) {
if(arr[j] < min) {
min = arr[j];
index = j;
}
}
arr[index] = arr[i];
arr[i] = min;
}
return arr;
}
입력 : 13 5 11 7 23 15
출력 : 5 7 11 13 15 23
n + (n-1) + (n-2) + ... + 1 = n*(n+1)/2
= N * N
= O(N * N)
n개의 자료가 들어있는 배열을 정렬하는 데에 걸리는 시간은 O(n^2)이다. 최선,평균,최악의 경우 모두 같은 비교횟수를 가진다.
장점
Selection Sort는 Bubble Sort와 비슷한 알고리즘으로, 장점 또한 비슷하다. Selection Sort는 Bubble Sort와 유사하지만 조금 더 빠른 정렬 방법이다.
단점
불안정 정렬 : 중복된 값을 입력 순서와 상관없이 무작위로 뒤섞인 상태에서 정렬이 이루어진다.
https://gyoogle.dev/blog/algorithm/Selection%20Sort.html
https://yjg-lab.tistory.com/160
https://gmlwjd9405.github.io/2018/05/06/algorithm-selection-sort.html