mergeSort

박진은·2022년 6월 23일
0

자료구조

목록 보기
35/37

병합정렬 여러개의 문제를 작은 문제로 나누어서 해결하고 다시 큰문제로 합성하는것

sorted = []

def merge(list, left, mid, right):
    global sorted#글로벌로 선언된 정렬 리스트
    newIndex = left#병합해서 만들 새로운 리스트의
    Lindex = left
    Rindex = min + 1
    while Lindex <= mid and Rindex <= right:
        if list[Lindex] > list[Rindex]:
            sorted[newIndex] = list[Lindex]
            newIndex += 1
            Lindex += 1
        else:
            sorted[newIndex] = list[Rindex]
            newIndex += 1
            Rindex += 1
    if Lindex > mid:# 이 조건문을 만족하면 왼쪽은 새로운 리스트에 포함되었다는 거고 남은 오른쪽을 채워야한다.
        sorted[newIndex:newIndex + right - Rindex + 1] = list[Rindex:right + 1]
    else: # 이 조건문을 만족하면 오른쪽은 새로운 리스트에 포함되었다는 거고 남은 왼쪽을 채워야한다.
        sorted[newIndex:newIndex + mid - Lindex + 1] = list[Lindex:mid + 1]
	list[left:right+1] = sorted[left:right+1] 마지막에 이 문장을 실행해서 정렬을 실시한
모든 요소를 다시 원래 정렬중인 리스트로 되돌린다.

def merge_sort(list, left, right):
    if left < right:
        mid = (left + right) // 2
        merge_sort(list, left, mid)#미드를 기준으로 다시 왼쪽 오른쪽으로 나눠서 호출
        merge_sort(list, mid + 1, right)#
        merge(list, left, mid, right)#합병하면서 정렬이 진행된다.
profile
코딩

0개의 댓글

Powered by GraphCDN, the GraphQL CDN