티스토리 뷰

목표

  • Selection Sort에 대해 설명할 수 있다.
  • Selection Sort 과정에 대해 설명할 수 있다.
  • Selection Sort를 Kotlin으로 구현할 수 있다.
  • Selection Sort 의 특징을 이해하여 시간 복잡도와 공간 복잡도를 계산할 수 있다.

요약

Selection Sort는 원소를 넣을 위치를 지정해놓고 해당 위치에 넣을 원소를 선택하는 알고리즘이다.

Insertion Sort와 헷갈릴 수가 있는데 Insertion Sort는 한 원소를 정한 후에 해당 원소가 들어갈 위치를 탐색하는 것이고 Selection Sort는 위치를 지정하고 해당 위치에 넣을 원소를 탐색한다.

과정 (오름차순)

  1. 주어진 배열 중에서 최소값을 찾는다.
  2. 찾은 최소값을 첫 번째 위치와 값을 교체한다.
  3. 첫 번째 위치에는 최소값이 위치해있기 때문에 제외하고 1번 과정을 반복한다.

img

Kotlin 코드

val lst = mutableListOf(1, 34, 5, 6, 78, 23, 56, 31, 64)

fun selectionSort() {
    for (i in 0 until lst.count() - 1) {
        var minVal = 0xffffff
        var minIdx = -1
        for (j in i until lst.count()) {
            if (minVal > lst[j]) {
                minVal = lst[j]
                minIdx = j
            }
        }
        lst[minIdx] = lst[i]
        lst[i] = minVal
    }
    print(lst)
}

시간 복잡도

1회차에서 n-1번 비교, 2회차에서 n-2번 비교, n-1번차에서 1번 비교하므로 식은 다음과 같이 표현할 수 있다.

(n-1) + (n-2) + ... + 2 + 1 = n(n-1)/2

Selection Sort는 미리 정렬되어 있는지의 여부와 상관 없이 2개의 원소를 대소 비교하기 때문에 최선, 평균, 최악의 경우 모두 시간 복잡도가 O(n^2)로 동일하다.

공간 복잡도

기존에 주어진 배열에서 원소 Swap만 이루어지므로 공간 복잡도는 O(n)이다.

특징

장점

  1. 간단하게 구현이 가능하다.
  2. 자료 이동 횟수가 미리 결정되어 있어 교환 횟수가 버블 정렬에 비해 적다.
  3. 주어진 배열에서만 교환하므로 다른 메모리 공간이 필요하지 않다. => 제자리 정렬(in-place sorting)

단점

  1. 시간 복잡도가 최선, 평균, 최악 모두 O(n^2)로 굉장히 비효율적이다.
  2. 불안정 정렬이다. 즉, 값이 같은 레코드가 있는 경우에 상대적인 위치가 변경될 수 있다.

Reference

반응형

'Programming > 알고리즘' 카테고리의 다른 글

힙 정렬 (Heap Sort)  (0) 2021.06.07
합병 정렬 (Merge Sort)  (0) 2021.06.07
퀵 정렬 (Quick Sort)  (0) 2021.06.01
삽입 정렬 (Insertion Sort)  (0) 2021.05.30
거품 정렬 (Bubble Sort)  (0) 2021.05.30
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함