본문 바로가기
IT/Algorithm

Selection Sort

by 물통꿀꿀이 2019. 6. 6.

Selection Sort는 이름 상에서도 알 수 있듯이 무언가(?)를 선택해서 정렬하는 방식이다. 


arr[] = 64 25 12 22 11

// Find the minimum element in arr[0...4]
// and place it at beginning
11 25 12 22 64

// Find the minimum element in arr[1...4]
// and place it at beginning of arr[1...4]
11 12 25 22 64

// Find the minimum element in arr[2...4]
// and place it at beginning of arr[2...4]
11 12 22 25 64

// Find the minimum element in arr[3...4]
// and place it at beginning of arr[3...4]
11 12 22 25 64 

글로는 이해하기 어려울 수 있으니, 하나의 Flow을 살펴보도록 하자.

위의 정렬 과정을 보면 공통 부분은 배열에서 가장 작은 값을 찾는 것이다. 그리고 가장 작은 값을 차례차례 정리한다.

(처음에 언급했던 무엇가는 바로 가장 작은 값이다.)


간단히 코드를 확인해보자.

for i in range(len(A)):

# Find the minimum element in remaining
# unsorted array
min_idx = i
for j in range(i + 1, len(A)):
if A[min_idx] > A[j]:
min_idx = j

# Swap the found minimum element with
# the first element

A[i], A[min_idx] = A[min_idx], A[i]  


for-loop이 중첩 되어 있는 구조로 첫 번째 for-loop은 배열의 index, 두 번째 for-loop은 i+1의 인덱스로 부터 가장 작은 값을 찾는다.

그러므로 인덱스가 차츰 올라갈 수록 가장 작은 값부터 쌓이게 된다.


코드로 명확히 확인 할 수 있듯이 for-loop이 중첩되면서 시간 복잡도 또한 O(n^2)가 된다.

그렇지만 선언된 배열 안에서 동작하기 때문에 추가 메모리가 소요되지 않는다. 그 덕에 공간 복잡도는 O(1)이 된다.


아래 그림은 참조


그림 1. Selection Sort



Reference

https://www.geeksforgeeks.org/selection-sort/

https://stackoverflow.com/questions/15799034/insertion-sort-vs-selection-sort

'IT > Algorithm' 카테고리의 다른 글

Boyer–Moore Majority Vote  (0) 2019.06.06
Insertion Sort  (0) 2019.06.06
HeapSort  (0) 2019.06.05
Heap  (0) 2019.05.27
Floyd Warshall  (0) 2019.03.06

댓글