본문 바로가기
Algorithm

삽입 정렬

by shur_ 2023. 12. 18.

 

삽입정렬

 

  • 처리되지 않은 데이터를 하나씩 골라 적절한 위치에 삽입
  • 데이터를 하나씩 확인하면서, 이 데이터는 어느 위치에 들어가는게 맞을 지 매번 계산해서 적절한 위치에 들어갈 수 있도록 해줌
  • 선택 정렬에 비해 구현 난이도가 높지만, 더 빠르게 동작
  • 앞쪽에 있는 원소들이 이미 정렬되어있다고 가정하고, 뒤 쪽에 있는 원소를 앞 쪽에 있는 원소의 위치 중에서 한 곳으로 들어가도록 만드는 방식으로 동작

 

처음 시작 시, 첫 번째 원소는 그 자체로 정렬되어 있다고 판단하고 두 번째 데이터가 어떤 위치로 들어갈지 판단.

카드 게임을 할 때, 새로운 카드가 들어오면 새로운 카드를 기존 정렬된 카드 사이 올바른 자리를 찾아 삽입함으로써 정렬이 유지되도록 하는 것과 같음.

 

삽입 정렬 예시

 

array = [7,5,9,0,3,1,6,2,4,8]

for i in range(1, len(array)):
    for j in range(i, 0, -1): # j는 삽입하고자 하는 원소의 위치. 인덱스 i부터 1까지 1씩 감소하며 반복하는 문법
        if array[j] < array[j-1]:
            array[j], array[j-1] = array[j-1], array[j]
        else: # 자기보다 작은 데이터를 만나면 그 위치에서 멈춤
            break

 

 

 

  • 시간복잡도: O(N^2), 선택정렬과 마찬가지로 반복문이 두번 중첩.
  • 삽입 정렬은 현재 리스트의 데이터가 거의 정렬되어 있는 상태라면 매우 빠르게 동작.
  • 최선의 경우 O(N)의 시간복잡도.

'Algorithm' 카테고리의 다른 글

플로이드 워셜 알고리즘  (0) 2024.10.12
다익스트라 알고리즘  (1) 2024.10.11
선택 정렬  (0) 2023.12.17
시간복잡도  (1) 2023.12.06
DFS, BFS  (1) 2023.10.12

댓글