알고리즘

Sorting Algorithm - 삽입정렬(insert sort)

pogles 2023. 1. 18. 10:46
  • 선택정렬에 비해 실행시간 측면에서 효율적이고, 선택정렬처럼 동작원리가 간단함.
  • 삽입정렬은 필요할때만 위치를 바꾸므로 데이터가 거의 정렬되었을 때 효율적
  • (한 사이클에) 정렬되어진 원소들은 항상 오름차순을 유지한다.

 

** 첫번째 원소는 정렬되있다 가정하고, 두번째 원소부터 시작.

      정렬됨.

      정렬할 원소

7     5     9 0 3 1

정렬할 원소 5는 정렬된 원소 7보다 작으므로 정렬한 원소 7 왼쪽으로 이동(7과변경)

5     7     9     0 3 1

 


 

 

5     7     9     0 3 1

 

정렬할 원소 9는 정렬된 원소 9보다 크므로 이동하지 않고 그대로 위치

5     7     9     0 3 1

 


 

5     7     9     0     3 1

 

정렬할 원소 0는 정렬된 원소 9보다 작으므로 정렬한 원소 7 왼쪽으로 이동

5     7     0     9     3 1

 

정렬할 원소 0은 정렬된 원소 7보다 작으므로 정렬한 원소 7 왼쪽으로 이동

5     0     7     9     3 1

 

정렬할 원소 0은 정렬된 원소 5보다 작으므로 정렬한 원소 5 왼쪽으로 이동

0     5     7     9     3 1
0     5     7     9     3 1

 

 

 

같은 로직으로 계속...

 

 


 

삽입정렬의 로직을 다음과 같이 생각하면 알고리즘 구현하는데 쉽다.

 

  • 첫번째 원소는 정렬되어있다고 생각하고 두번째 원소부터 정렬을 시작한다.
  • i 번째 원소는 i-1 번째 원소부터 1번째 까지 비교하며 이동한다.  i 번째 요소가 (i-1)번째 요소보다 작으면 SWAP 한다.
  • 정렬된 원소의 위치는 1씩 증가하고 동시에 비교할 원소도 1개씩 증가한다.
  • 비교할 원소들은 1씩 증가, 비교 순서는 역순.
# PYTHON

array = [7, 5, 9, 0, 3, 1]

for i in range(1,len(array)): # 두번째 원소부터(index 1)
	for j in range(i,0,-1): # 역순으로 이동
    	if (j[i] < j[i-1]): # 이동하면서 값 비교
        	array[j], array[j-1] = array[j-1]. array[j]
        else: # 비교중지
        	break;