본문 바로가기
자료구조

삽입 정렬(Insertion Sort)

by winston1214 2021. 10. 23.
반응형

삽입 정렬을 소개할 때 하는 설명들이 있다. 카드를 정렬하는 방법과 비슷하다.

예를 들어 원카드를 한다 생각해보자

패에 내 카드 5장이 들어있다. 모양은 모두 스페이스고, J K 3 9 7  로 구성되어있다. 이러면 어떻게 패를 정리할 것인가?

보통은 3을 하나 뽑고 맨 앞으로 놓는다. 그러면 3 J K 9 7 이 된다. 이런 식으로 정렬되는 것이 삽입 정렬이다.

이에 대한 ADL은 다음과 같다.

insertSort(a[],n)
	for (i <- 2; i<= n; i <- i+1) do {
    	v <- a[i];
        j <- i;
        while (a[j-1] > v) do {
        	a[j] <- a[j-1];
            j <- j-1;
        }
        a[j] <- v;
    }
end insertSort()

 

이를 간단한 예시를 통해서 정렬 수행 과정을 보이겠다. [3,2,5,1,4]

카드를 뽑아서 앞에  놓는다는 것은 기존에 있는 것을 미는 것이다. 따라서 이 원리를 그대로 적용한다.

삽입 정렬의 시간 복잡도는 \( O(N^{2} \) 이다.

python code는 다음과 같다.

def insertSort(a,n):
    for i in range(2,n+1):
        v = a[i]
        j = i
        while (a[j-1] > v):
            print(f'j = {j}')
            a[j] = a[j-1]
            j = j-1
            
        a[j] = v
        print(f'중간과정 {i} : ',a)
    return a

a = [-1,3,2,5,1,4]
print(insertSort(a, len(a)-1))

 

반응형

'자료구조' 카테고리의 다른 글

퀵 정렬(Quick Sort)  (0) 2021.10.23
쉘 정렬(Shell Sort)  (0) 2021.10.23
버블 정렬(Bubble Sort)  (0) 2021.10.22
선택 정렬  (0) 2021.10.22
Red-black Tree  (0) 2021.10.22

댓글