선택 정렬은 정렬되지 않은 데이터들에 대해 가장 작은 데이터를 찾아 가장 앞의 데이터와 교환해나가는 방식이다.
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개의 주어진 배열을 정렬하는 데에 O(n^2)만큼의 시간이 걸리고 최선, 평균 최악의 경우 모두 동일한 시간 복잡도를 갖는다. 외부의 루프를 (n - 1)번 도는 동안 각 자리에 와야하는 최댓값을 구하기 위하여 n - 1, n - 2, ..., 1번 비교 연산을 수행하기 때문이다.
공간 복잡도는 주어진 배열 안에서 교환을 통해 정렬이 수행되므로 O(n)이다.