선택 정렬은 현재 인덱스에 들어갈 값을 선택하여 정렬하는 알고리즘이다.
추가 메모리를 사용하지 않기 때문에 In-place 정렬이지만, 동일한 값들의 순서가 변할 수 있기 때문에 Unstable 정렬이다.
1. 배열의 가장 마지막 인덱스를 선택한다.
2. 현재 인덱스 이전의 값들을 비교하여 가장 큰 수를 선택한다.
3. 선택된 두 값을 교체한다.
4. 인덱스를 줄여가며 위의 과정을 반복한다.
O(1)
의 공간 복잡도를 갖는다.O(N)
의 시간을 소모한다. 이때, 각 루프마다 현재 인덱스를 제외한 값들 중 최대값을 찾고, 이를 현재 인덱스의 값과 교환(swap)해주어야 하기 때문에 O(N)
의 시간을 필요로 한다. 따라서 선택 정렬은 O(N^2)
의 시간 복잡도를 갖는다.arr = [4, 6, 1, 7, 2, 9, 3]
n = len(arr)
for i in range(n-1, 0, -1):
max_idx = i
for j in range(i):
if arr[j] > arr[max_idx]:
max_idx = j
arr[i], arr[max_idx] = arr[max_idx], arr[i]
--