장 준
씨포유
장 준
전체 방문자
오늘
어제
  • 분류 전체보기 (91)
    • 프로그래밍언어 (15)
      • c언어 (10)
      • 파이썬 (0)
      • 자바스크립트 (5)
    • PS (58)
      • 알고리즘 이론 (18)
      • 프로그래머스 (5)
      • 백준 (35)
    • CS (16)
      • 자료구조 (5)
      • 운영체제 (3)
      • 네트워크 (5)
      • 데이터베이스 (0)
      • 기초 지식 (3)
    • 브랜드 (1)

블로그 메뉴

  • 태그

인기 글

태그

  • 프로그래머스
  • Visual Studio
  • pypy3
  • Stack
  • recursion
  • CS
  • BFS
  • bitmask
  • 파이썬
  • DP
  • 자바스크립트
  • 프로그래밍언어
  • 알고리즘
  • 코딩테스트
  • 자료구조
  • C
  • Priority Queue
  • Kruskal algorithm
  • python3
  • Network
  • nodejs
  • Implementation
  • JavaScript
  • 백준
  • 씨포유
  • 기초 지식
  • codesandbox
  • DFS
  • JS
  • PS

최근 댓글

최근 글

hELLO · Designed By 정상우.
장 준

씨포유

[파이썬으로 배우는 알고리즘] 선택 정렬(Selection Sort)
PS/알고리즘 이론

[파이썬으로 배우는 알고리즘] 선택 정렬(Selection Sort)

2022. 11. 17. 11:39
728x90

선택 정렬(Selection Sort)이란?

선택 정렬은 해당 순서에 원소를 넣을 위치는 이미 정해져 있고, 그 위치에 어떤 원소를 넣을지 "선택"하는 정렬 알고리즘입니다.

 


선택 정렬 과정

위와 같이 정렬되어 있지 않은 배열을 선택 정렬 알고리즘을 사용하여 정렬해보겠습니다.

 

제일 왼쪽 인덱스 0 즉, 제일 작은 원소가 들어갈 자리를 정하고, 해당 인덱스에 어떤 원소를 넣을지 다음 원소부터 순서대로 탐색합니다.

 

11, 2, 4, 3 원소 중에는 2가 제일 작으므로 2의 인덱스 2를 기억합니다.

 

인덱스 0에 저장된 원소 10과 인덱스 2에 저장된 2를 비교하여 2가 더 작은 것을 알 수 있습니다. 2가 더 작기 때문에 두 원소를 서로 바꿔줍니다.

 

1회전이 끝나고 인덱스 0의 원소를 구했습니다. 그다음으로 왼쪽에 위치한 인덱스 1에 어떤 원소를 넣을지 다음 원소부터 순서대로 탐색합니다.

 

10, 4, 3 원소 중에는 3이 제일 작으므로 3의 인덱스 4를 기억합니다.

 

인덱스 1에 저장된 원소 11과 인덱스 4에 저장된 3을 비교하여 3이 더 작은 것을 알 수 있습니다. 3이 더 작기 때문에 두 원소를 서로 바꿔줍니다.

 

위 과정을 반복하여 각 인덱스 자리에 들어갈 원소를 저장하여 정렬이 완료됩니다.

 


선택 정렬 특징

  • 간단한 구현
  • 정렬을 위한 비교 횟수는 많지만 버블 정렬에 비해 실제로 교환하는 횟수는 적음
  • 정렬 과정에서 배열에서 값을 바꾸는 식으로 동작하여 공간 복잡도는 O(N). 값을 바꿀 때 임시 공간만 필요하기 때문에 in-place 정렬
  • 최선이든 최악이든 시간 복잡도는 O(N^2)

 


선택 정렬 구현

코드

def selection_sort(a):
    n = len(a)
    for i in range(n - 1):
        min_index = i
        for j in range(i + 1, n):
            if a[min_index] > a[j]:
                min_index = j
        a[min_index], a[i] = a[i], a[min_index]


a = [10, 11, 2, 4, 3]
print('###정렬전###')
print(a)
selection_sort(a)
print('###정렬후###')
print(a)

결과

728x90
반응형
저작자표시 (새창열림)

'PS > 알고리즘 이론' 카테고리의 다른 글

[파이썬으로 배우는 알고리즘] 버블 정렬(Bubble Sort)  (2) 2022.11.04
[파이썬으로 배우는 알고리즘] 이분 탐색(Binary Search)  (0) 2022.08.11
[파이썬으로 배우는 알고리즘] 위상 정렬(Topology Sort)  (2) 2022.08.08
[파이썬으로 배우는 알고리즘] 플로이드 워셜(Floyd Warshall) 알고리즘  (0) 2022.08.01
[파이썬으로 배우는 알고리즘] 다익스트라(Dijkstra) 알고리즘  (0) 2022.07.31
    'PS/알고리즘 이론' 카테고리의 다른 글
    • [파이썬으로 배우는 알고리즘] 버블 정렬(Bubble Sort)
    • [파이썬으로 배우는 알고리즘] 이분 탐색(Binary Search)
    • [파이썬으로 배우는 알고리즘] 위상 정렬(Topology Sort)
    • [파이썬으로 배우는 알고리즘] 플로이드 워셜(Floyd Warshall) 알고리즘
    장 준
    장 준
    C4U(Computer For You)

    티스토리툴바