[알고리즘] 선택 정렬이란? (개념, 파이썬 코드)

2024. 4. 10. 16:34·알고리즘
728x90

선택 정렬(Selection Sort)이란?

배열의 각 위치마다 어떤 원소를 넣을지 선택하는 알고리즘

  • 방법
    • 주어진 배열 중 최소값을 찾는다.
    • 그 값을 첫 번째 원소와 교체한다.
    • 첫 번째 원소를 제외하고 위 작업을 반복한다.

버블 정렬과 유사한 알고리즘이다.

(참고 글 : 버블 정렬이란?)

 

파이썬으로 구현하기

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

    for i in range(n-1):
        min_idx = i

        # i ~ n-1 구간 중 가장 작은 값의 위치를 찾는다.
        for j in range(i, n):
            if arr[j] < arr[min_idx]:
                min_idx = j

        # 가장 작은 값을 arr[i] 위치로 이동시킨다.     
        arr[i], arr[min_idx] = arr[min_idx], arr[i]


if __name__ == "__main__":
    arr = [1,6,4,2,3,5]

    print(f"before : {arr}")  # 정렬 전 리스트
    selection_sort(arr)
    print(f"after : {arr}")  # 정렬 후 리스트

 

시간복잡도

입력 리스트의 원소가 n개인 경우,

선택 정렬의 연산 횟수는 다음과 같다.

  • 1번째 작업 : n번 비교
  • 2번째 작업 : n-1번 비교
  • ...
  • n번째 작업 : 1번 비교

(n) + (n-1) + (n-2) + ... + (1) = n(n-1)/2 이므로,

O(n^2)의 시간이 소요된다.

728x90

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

[알고리즘] 퀵 정렬이란? (개념, 파이썬 코드)  (0) 2024.04.11
[알고리즘] 삽입 정렬이란? (개념, 파이썬 코드)  (0) 2024.04.10
[알고리즘] 버블 정렬이란? (개념, 파이썬 코드)  (0) 2024.04.10
[알고리즘] 알고리즘의 시간 복잡도를 표현하는 빅오 표기법 (Big O)  (1) 2024.04.07
[알고리즘] 합병 정렬 (Merge Sort) 이란?  (0) 2022.07.18
'알고리즘' 카테고리의 다른 글
  • [알고리즘] 퀵 정렬이란? (개념, 파이썬 코드)
  • [알고리즘] 삽입 정렬이란? (개념, 파이썬 코드)
  • [알고리즘] 버블 정렬이란? (개념, 파이썬 코드)
  • [알고리즘] 알고리즘의 시간 복잡도를 표현하는 빅오 표기법 (Big O)
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)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
kiminae
[알고리즘] 선택 정렬이란? (개념, 파이썬 코드)
상단으로

티스토리툴바