728x90
array = [5,3,2,1,4]
for i in range(len(array)):
min_index = i # 가장 작은 원소의 인덱스
for j in range(i+1, len(array)):
if array[min_index] > array[j]:
min_index = j
array[i], array[min_index] = array[min_index], array[i]
print(array)
선택 정렬의 원리: 가장 작은 데이터를 선택하여 앞에 있는 데이터를 바꿔치기 하는 것을 (n-1)번 반복한다.
다음과 같은 배열이 있다고 하자.
현재 맨 앞의 데이터와 배열에서 가장 작은 원소인 1을 교환한다.
1은 이미 정렬된 인덱스 이므로 제외한다.두번째 인덱스 3과 나머지 원소들 중 가장 작은 원소인 2를 교환한다.
1과 2는 이미 정렬되었으므로 제외한다.그런데 3은 이미 제자리에 와있으므로 교환이 이루어지지 않는다.
남아있는 원소들 중 가장 작은 4와 5의 위치를 바꿔준다.
마지막 데이터는 가만히 두어도 이미 정렬된 상태이다. 이로써 배열이 오름차순으로 정렬되었다.
시간 복잡도는 O(N^2) 이다.
N-1 번만큼 가장 작은 수를 찾아서 맨 앞으로 보내야 한다 . (마지막 인덱스는 자동으로 정렬되므로 n-1번이다.)
또한 매번 가장 작은 수를 비교하기 위해서 비교 연산이 필요하다.
따라서 연산횟수는 N + (N-1) + (N-2) + ... + 2 = N(N+1)/2 이고 빅오표기법에 의해 O(N^2)이다.
즉, 굉장히 비효율적인 정렬 알고리즘임을 알 수 있다.
728x90
'Algorithm (PS)' 카테고리의 다른 글
[백준] 7562 in Python 파이썬 풀이 (0) | 2022.01.10 |
---|---|
[백준] 4963 파이썬 풀이 (0) | 2022.01.10 |
[백준] 10844 in Python 파이썬 풀이 (0) | 2022.01.09 |
[Python] DP 다이나믹 프로그래밍 (0) | 2022.01.07 |
[백준] 1476 in Python 파이썬 풀이 (0) | 2022.01.05 |