반응형
선택 정렬(Selection Sort)은 매우 간단한 알고리즘이다.
가장 작은 숫자의 index를 선택하고 이를 배열의 맨 처음 값과 비교해서 자리를 바꾸는 것이다.
ADL은 다음과 같다.
selectionSort(a[],n)
for (i <- 1; i<n; i<- i+1) do {
minIndex <- i;
for (j <- i+1; j<=n; j <- j+1) do
if (a[j] < a[minIndex]) then minIndex <- j;
a[i]와 a[minIndex] 교환;
}
end selectionSort()
간단한 예시로 [3,2,5,1,4]에 대해 선택 정렬을 해보겠다.
여기서 빨간색은 minIndex를 가리키는 것이고 파란색은 바꿀 값(처음부터 순차적으로)을 표시한 것이다.
서로 교환이 되면서 정렬이 이뤄지는 것이다.
이는 N개의 원소 각각에 대해 N-1 번 비교해야하기 때문에 \( \frac{N(N-1)}{2} \)가 되어 시간복잡도는 \( O(N^{2}) \)가 된다.
파이썬 코드는 다음과 같다.
def selectionSort(a,n):
for i in range(1,n):
minIndex = i
for j in range(i+1,n+1):
if a[minIndex] > a[j]:
minIndex = j
a[minIndex],a[i] = a[i],a[minIndex]
return a
a = [-1,3,2,5,1,4]
print(selectionSort(a,len(a)-1))
여기서 n은 전체 길이에서 1을 뺀 값이고 -1이라는 null 값을 앞에 삽입하게 된다.
반응형
'자료구조' 카테고리의 다른 글
삽입 정렬(Insertion Sort) (0) | 2021.10.23 |
---|---|
버블 정렬(Bubble Sort) (0) | 2021.10.22 |
Red-black Tree (0) | 2021.10.22 |
Linked List - C와 Python 비교 - 개념 (1) | 2020.07.15 |
queue - 3 (0) | 2020.07.15 |
댓글