[알고리즘] 선택 정렬 (Selection Sort) 이란?

2022. 6. 24. 17:17·알고리즘
728x90

선택 정렬 (Selection Sort) 란?

해당 순서에 원소를 넣을 위치는 정해져 있고, 어떤 원소를 넣을지 선택하는 알고리즘.

해당 자리를 선택하고 그 자리에 오는 값을 찾는 방법이다.

 

 

과정 (오름차순)

1. 주어진 배열 중에서 최솟값을 찾는다.

2. 그 값을 맨 앞에 위치한 값과 교환한다.

3. 맨 처음 위치를 뺀 나머지 배열을 같은 방법으로 교환한다. 이를 반복한다.

 

 

Python Code

def selection_sort(arr):
    n = len(arr)
    index_min = 0

    for i in range(n):
        index_min = i
        for j in range(i+1, n): # 최소 값의 위치를 찾는다.
            if arr[j] < arr[index_min]:
                index_min = j
        
        temp = arr[index_min]   # 최소값을 가진 원소와 i번째 원소를 교환한다.
        arr[index_min] = arr[i]
        arr[i] = temp

    print(arr)

selection_sort([5,4,3,2,1])

 

 

시간복잡도

첫 번째 회전에서 비교 횟수 : 1 ~ (n-1) = n-1

두 번째 회전에서 비교 횟수 : 2 ~ (n-2) = n-2

...

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

n개의 주어진 배열을 정렬하는데 O(n^2) 의 시간이 걸린다. 최선, 평균, 최악인 경우 모두 O(n^2) 으로 동일하다.

 

 

공간복잡도

주어진 배열 안에서 교환(swap)을 통해 정렬이 수행되므로 O(n)이다.

 

 

장점

- bubble sort와 동일하게 알고리즘이 단순하다.

- 정렬을 위한 비교 횟수는 많지만, bubble sort에 비해 실제로 교환하는 횟수는 적기 때문에 많은 교환이 일어나야 하는 자료 상태에서는 비교적 효율적이다.

- bubble sort와 동일하게 정렬하고자 하는 배열 안에서 교환하는 방식이므로 다른 메모리 공간이 필요하지 않다.

 

 

단점

- 시간 복잡도가 O(n^2) 으로, 비효율적이다.

- 불안정 정렬(Unstable Sort)이다.

* 불안정 정렬 : 중복된 값이 입력 순서와 동일하지 않게 정렬되는 알고리즘

 

728x90

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

[알고리즘] 퀵 정렬 (Quick Sort) 이란?  (0) 2022.07.18
[알고리즘] 삽입 정렬 (Insertion Sort) 이란?  (0) 2022.07.18
[알고리즘] 버블 정렬 (Bubble Sort) 이란?  (0) 2022.06.24
[알고리즘] '재귀 호출'과 '완전 탐색'으로 문제를 해결하는 방법, 재귀 호출 문제  (0) 2021.02.10
[알고리즘] 재귀 호출, 재귀 함수란?  (0) 2021.02.08
'알고리즘' 카테고리의 다른 글
  • [알고리즘] 퀵 정렬 (Quick Sort) 이란?
  • [알고리즘] 삽입 정렬 (Insertion Sort) 이란?
  • [알고리즘] 버블 정렬 (Bubble Sort) 이란?
  • [알고리즘] '재귀 호출'과 '완전 탐색'으로 문제를 해결하는 방법, 재귀 호출 문제
kiminae
kiminae
공부한 내용을 정리합니다.
  • kiminae
    데이터 다루는 사람
    kiminae
  • 전체
    오늘
    어제
    • 분류 전체보기 (67)
      • AI & 빅데이터 (6)
        • kafka (10)
        • [Book] 빅데이터를 지탱하는 기술 (12)
      • 알고리즘 (19)
      • 알고리즘 문제풀이 (13)
        • programmers (0)
        • 백준 (1)
        • LeetCode (12)
      • Android (3)
      • Book&Lesson (13)
        • [Lesson] 프로그래머스 커뮤러닝 (Pyth.. (1)
      • 참고한 글들 (1)
      • 컨퍼런스 정리 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    카프카
    leetcode
    추천알고리즘
    BI도구
    mvvm
    카프카클라이언트
    정렬
    데이터엔지니어
    빅데이터를지탱하는기술
    트리
    시간복잡도
    정렬알고리즘
    ViewModel
    sort
    알고리즘
    알고리즘풀이
    MPP데이터베이스
    Algorithm
    알고리즘문제
    머신러닝
    데이터시각화
    파이프라인구축
    버블정렬
    개인화추천
    hadoop
    리트코드
    빅데이터
    릿코드
    DP문제
    Kafka
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
kiminae
[알고리즘] 선택 정렬 (Selection Sort) 이란?
상단으로

티스토리툴바