반응형
정의
합병 정렬 또는 병합 정렬 (merge sort)는 O(nlogn) 비교 기반 정렬 알고리즘이다. 이 정렬은 분할 정복 알고리즘의 하나로, 존 폰 노이만이 1945년에 개발했다.
* 비교 정렬은 하나의 추상적인 비교 동작을 통해 목록 요소들을 읽어내는 정렬 알고리즘의 일종으로, 두 요소 중 어느 것이 최종 정렬 목록에 발생되어야 하는지를 결정한다.
알고리즘
1. 리스트의 길이가 0또는 1이면 이미 정렬된 것으로 본다. 그렇지 않은 경우에는
2. 정렬되지 않은 리스트를 절반으로 잘라 비슷한 크기의 두 부분 리스트로 나눈다.
3. 각 부분 리스트를 재귀적으로 합병 정렬을 이용해 정렬한다.
4. 두 부분 리스트를 다시 하나의 정렬된 리스트로 합병한다.
소스코드
def mergeSort(X) : if len(X) <= 1 : return X left = mergeSort(A[:len(A)/2]) right = mergeSort(A[len(A)/2:]) i, j, k = 0, 0, 0 while i < len(left) and j < len(right) : if left[i] < right[j] : A[k] = left[i] i += 1 else: A[k] = right[j] j += 1 k += 1 if i == len(left) : while j < len(right) : A[k] = right[j] j += 1 k += 1 elif j == len(right) : while i < len(left) : A[k] = left[i] i += 1 k += 1 return A
출처 : https://ko.wikipedia.org/wiki/%ED%95%A9%EB%B3%91_%EC%A0%95%EB%A0%AC
반응형
'0 > algorithm' 카테고리의 다른 글
백준 2042번 구간 합 (Python) (1) | 2018.11.02 |
---|---|
백준 1620번 나는야 포켓몬 마스터 이다솜 (Python) (0) | 2018.11.01 |
백준 9184번 신나는 함수 실행 (Python) (0) | 2018.10.30 |
백준 1992번 쿼드트리 (Python) (1) | 2018.10.29 |
하노이의 탑 (Python) (0) | 2018.10.29 |