반응형
# 병합 정렬
재귀 용법을 사용한 정렬 알고리즘
리스트를 반으로 잘라 나눈 후 재귀적으로 병합 정렬
부분 리스트를 다시 하나의 정렬된 리스트로 합병
# 알고리즘 구현
# 병합하기
def merge(left,right):
lp = 0
rp = 0
merged=list()
# left,right 둘다 데이터 있을 때
while len(left) >lp and len(right) >rp :
if left[lp]>right[rp]:
merged.append(right[rp])
rp+=1
else:
merged.append(left[lp])
lp+=1
# left에만 데이터 남아있을 때
while len(left) > lp :
merged.append(left[lp])
lp+=1
# right에만 데이터 남아있을 때
while len(right) > rp :
merged.append(right[rp])
rp+=
return merged
# 데이터 나누고 merge 함수 호출
def mergesplit(data):
if len(data) <=1:
return data
medium = int(len(data)/2)
left = mergesplit(data[:medium]
right = merghsplit(data[medium:]
return merge(left,right)
# 시간복잡도
단계는 항상
logn개 만들어짐각 단계의 시간 복잡도는 O(n)
전체 시간 복잡도는 O(nlogn)
반응형
'Algorithm > 자료구조, 알고리즘' 카테고리의 다른 글
[코딩 + 알고리즘 완주반] 19일차. 그래프 이해와 자료구조 (0) | 2021.04.05 |
---|---|
[코딩 + 알고리즘 완주반] 19일차. 이진탐색( Binary Search ), 순차탐색 ( Sequential Search ) (0) | 2021.04.05 |
[코딩 + 알고리즘 완주반] 18일차. 퀵 정렬 (0) | 2021.04.04 |
[코딩 + 알고리즘 완주반] 17일차. 재귀용법, 동적계획법과 분할정복 (0) | 2021.03.31 |
[코딩 + 알고리즘 완주반] 16일차. 정렬 알고리즘(버블 정렬, 선택 정렬, 삽입 정렬,공간복잡도) (0) | 2021.03.30 |