알고리즘 [합병정렬]
🔎 분할통치법
분할 통치법: 알고리즘 설계 기법의 일종으로 세가지 형태로 나뉘게 된다.
- 분할 : 입력된 데이터를 둘 이상의 분리된 부분집합으로 나눈다.
- 재귀 : 각각에 대한 부문제를 재귀적으로 해결한다.
- 통치 : 부문제들에 대한 해결을 합쳐 L의 해결을 구한다.
분할 통치법으로 설계한 정렬 형태 : 합병정렬, 퀵 정렬
🔎 합병 정렬
특징
- 분할통치법에 기초한 정렬
- 비교에 기초한 정렬
- 외부의 우선순위 큐를 사용하지 않음
- 데이터를 순차적으로 접근한다.
Alg mergeSort(L)
input list L with n elements
output sorted list L
1. if(L.size() > 1)
L1, L2 <- partition(L, n/2)
mergeSort(L1)
mergeSort(L2)
L <- merge(L1,L2)
2. return
Alg merge(L1,L2)
input sorted list L1 and L2 with n/2 elements each
output sorted list of L1 U L2
1. L <- empty list
2. while (!L1.isEmpty() & !L2.isEmpty())
if(L1.get(1) <= L2.get(1))
L.addLast(L1.removeFirst())
else
L.addLast(L2.removeFirst())
3. while (!L1.isEmpty())
L.addLast(!L2.isEmpty())
4. while (!L2.isEmpty())
L.addLast(L2.removeFirst())
5. return L
1에서 빈 리스트를 만들고 해당 나눠진 두가지 리스트의 값을 비교하여 차례대로 넣어주고 남은 리스트는 뒤에 붙여준다.
의사코드로 보니 훨씬 간단하고 이해가 잘 된다.
댓글남기기