선택 정렬은 버블 정렬과 유사한 알고리즘으로, 해당 순서에 원소를 넣을 위치는 이미 정해져있고, 어떤 원소를 넣을지 선택하는 알고리즘이다.
선택 정렬은 배열에서 해당 자리를 선택하고 그 자리에 오는 값을 찾는 것이라고 생각하자!
void selectionSort(int[] arr) {
int indexMin = 0;
int temp = 0;
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;
}
}
temp = arr[indexMin]; // 4
arr[indexMin] = arr[i];
arr[i] = temp;
}
System.out.println(Arrays.toString(arr));
}
비교하는 것이 상수 시간에 이루어진다는 가정 아래, n개의 주어진 배열을 정렬하는데 O(n^2)만큼 시간이 걸린다. 따라서 최선, 평균, 최악의 경우 시간복잡도는 O(n^2)로 동일하다.
주어진 배열 안에서 교환을 통해, 정렬이 수행되므로 O(n)이다.