- Published on
MIT-6.006 Intoduction to Algorithms - Lecture3(Insertion sort, Merge sort)
- Authors
- Name
- Taehwa Yoon
삽입 정렬(Insertion Sort), 병합 정렬(Merge Sort)
정렬이 필요한 이유?
많은 문제들이 일단 정렬이 된 이후엔 훨씬 해결하기 쉬워짐
- 중간값을 찾는 문제
- 이진 탐색
- 데이터 압축
- 컴퓨터 그래픽 등
삽입 정렬(Insertion Sort)
이미 정렬된
A[0:i-1]
배열에A[i]
를 비교해가며 올바른 위치에 삽입될 때까지 자리를 바꾼다.모든 배열 요소에 대해서(
θ(n)
),θ(n)
만큼의 비교와 swap이 필요 =>θ(n^2)
> 비교와 swap의 작업량의 크기는 거의 비슷하다고 가정
이진 삽입 정렬(Binary Insertion Sort)
A[0:i-1]
은 이미 정렬되어 있기 때문에 삽입할 자리를 찾을 때 Binary search를 이용한다.- Binary search 자체는
θ(logn)
이지만 삽입 이후 나머지 element들을 shift하는데θ(n)
의 작업량을 가지므로 결과적으로 똑같이θ(n^2)
병합 정렬(Feat. Divide and Conquer)
배열 A
를 L
과 R
로 분할하고 각각을 정렬한 L'
과 R'
을 병합하는 방법
n = 1
이면 완료.- 그 외의 경우엔 재귀적으로
A[1, ..., n / 2]
와A[n / 2 + 1, ..., n]
을 정렬한다. - 정렬된 두 sub-array들을 병합한다.
Merge 방식
좌우를 비교하며 작은 값을 가져와서 배열에 채워준다.
병합정렬의 복잡도 분석
θ(cn * (1 + lgn)) = θ(nlogn)
공간 복잡도
- 삽입정렬의 경우 in-place 로 정렬되므로 공간 복잡도는
θ(1)
- 병합 정렬의 경우
θ(n)