- 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)
