본문 바로가기
전공/Algorithm

[Algorithm] 삽입 정렬

by 으녜 2022. 3. 4.
728x90

※ 삽입 정렬이란?

 

아직 정렬되지 않은 임의의 데이터를 이미 정렬된 부분의 적절한 위치에 삽입해 가며 정렬하는 방식

 

 

 

다음 데이터 셋을 삽입 정렬로 정렬해보자.

 

 

[ 5, 1, 10, 8, 7, 6, 4, 3, 2, 9 ]

 

 

 

(1) 첫 번째 원소 5와 두 번째 원소 1을 비교했을 때, 더 작은 1을 5 앞으로 삽입한다. [1,5,10,8,7,6,4,3,2,9]

(2) 5를 1, 10과 비교했을 때, 5가 1보다 크고 10보다 작으므로 지금 상태를 유지한다. [1,5,10,8,7,6,4,3,2,9]

(3) 1, 5, 10은 정렬이 되어있으므로 8을 1, 5, 10과 비교했을 때, 1, 5보다 크고 10보다 작으므로 8을 10 앞에 삽입한다. [1, 5, 8, 10, 7, 6, 4, 3, 2, 9]


 

삽입 정렬을 파이썬으로 구현한 코드는 다음과 같다.

 

 

👩🏻‍💻Python Code👩🏻‍💻

 

data_set = [5,1,10,8,7,6,4,3,2,9]

for i in range(1,10):
    j = i
    while data_set[j]<data_set[j-1]:
        temp = data_set[j]
        data_set[j] = data_set[j-1]
        data_set[j-1] = temp
        if(i!=1):
            j -=1
        
print(data_set)

 

 

Explain ) 2번째 원소부터 왼쪽의 원소가 자신보다 작을 때까지 교체를 해준다. 이때, 해당 원소가 2번째 원소이면 한 번의 비교 후 정렬을 끝내고, 3번째 원소부터는 조건이 성립하지 않을 때까지 비교, 정렬을 진행한다.

 

 

삽입 정렬의 시간 복잡도는?

 

삽입 정렬은 최악의 경우 선택, 버블 정렬과 같이 O(N^2) 의 시간 복잡도를 가진다. 그러나 정렬을 진행하는 동안 왼쪽에 위치한 원소들은 정렬이 되어 있기 때문에 비교 연산을 덜 수행한다. 또한 어느 정도 정렬이 되어 있는 경우 선택, 버블 정렬보다 빠르게 정렬된다. 따라서 시간 복잡도는 동일하지만 실제로는 더 효율적인 정렬 알고리즘이다. 

728x90

'전공 > Algorithm' 카테고리의 다른 글

[Algorithm] 힙 정렬  (0) 2022.03.10
[Algorithm] 병합 정렬  (0) 2022.03.06
[Algorithm] 퀵 정렬  (0) 2022.03.05
[Algorithm] 버블 정렬  (0) 2022.03.02
[Algorithm] 선택 정렬  (2) 2022.02.27