Hippo's data
선택 정렬 (Selection Sort) 알고리즘 본문
728x90
이번에는 비교정렬 알고리즘인 선택 정렬 (Selection Sort) 알고리즘에 대해 알아보겠습니다!
# 동작과정
선택정렬은 매우매우매우 간단합니다
매번 비교마다 최솟값(오름차순 정렬) 혹은 최댓값(내림차순 정렬)을 제일 앞으로 보내주면 되는데요 간단한 만큼 직관적이지만 시간복잡도가 꽝입니다...
# Python 코드
오름차순으로 정렬하는 코드입니다!
인덱스를 처음부터 순회하며 매번 최솟값 인덱스를 찾아 해당 위치의 값과 최솟값 인덱스의 값을 교환해줍니다
def selection_sort(A):
n = len(A)
for i in range(n):
least = i # 현재 위치를 최솟값 위치로 가정
for j in range(i+1, n):
if A[j] < A[least]: # 더 작은 값이 있으면
least = j # 최솟값 인덱스 위치 갱신
A[i], A[least] = A[least], A[i] # 현재 위치와 최솟값 위치 교환
return A
# 성능분석 - 시간복잡도
선택정렬의 시간복잡도는 매번 비교마다 최선, 최악, 평균적인 경우 모두 최솟값 혹은 최대값을 찾으며 끝까지 동작해야 하기 때문에 최선인 경우(Best), 최악의 경우(Worst), 평균적인 경우(Average) 모두 동일하게 O(n²)으로 동작합니다!
# 관련 문제
백준 1427번 소트인사이드
https://www.acmicpc.net/problem/1427
# reference
Do it! 알고리즘 코딩 테스트 - 파이썬 편(김종관 저/이지스퍼블리싱 (주))
728x90
'Algorithm > 알고리즘 이론(Algorithm theory)' 카테고리의 다른 글
버블 정렬(Bubble sort) 알고리즘 (3) | 2024.11.09 |
---|---|
삽입 정렬 (Insertion Sort) 알고리즘 (4) | 2024.11.09 |
퀵 정렬(Quick Sort) 알고리즘 (11) | 2024.11.01 |
비교정렬 시간 성능의 하한(lower bound): O(nlogn) (0) | 2024.10.29 |
우선순위 큐 구현 (PriorityQueue, Heap) (2) | 2024.10.03 |