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

2024. 4. 10. 19:00·알고리즘
728x90

삽입 정렬(Insertion Sort)이란?

원소를 하나씩 확인하면서, 각 원소를 적절한 위치에 삽입하는 알고리즘

  • 방법
    • 2번째 원소부터 시작한다.
    • 해당 원소의 왼쪽으로 하나씩 확인하면서, 자신보다 작은 원소가 존재하는 경우 그 오른쪽에 삽입한다.
      자신보다 큰 원소인 경우 오른쪽으로 한 칸 밀고, 다음 원소를 확인한다.
    • 위 작업을 n번째 원소까지 반복한다.

 

파이썬으로 구현하기

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

    for i in range(1, n):  # arr[i]의 위치를 찾는다.
        for j in range(i, 0, -1):
            if arr[j] < arr[j-1]:  # 자신(arr[j])보다 더 큰 원소인 경우, 큰 원소를 오른쪽으로 한 칸 이동시킨다.
                arr[j], arr[j-1] = arr[j-1], arr[j]
            else:
                break

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

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

 

시간복잡도

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

삽입 정렬의 연산 횟수는 아래와 같다.

  • 2번째 원소 : 최대 1번
  • 3번째 원소 : 최대 2번
  • ...
  • n번째 원소 : 최대 n-1번

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

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

728x90

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

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

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바