Merge sort

백승진·2021년 8월 31일
0

Quick sort 와 같이 분할, 정복, 병합의 루틴을 가지나 병합을 위해 새로운 collection을 생성한다는 점이 차이이다. 최악의 상황을 제외하면 일반적으로 Quick sort 성능이 더 뛰어나다.

def merge_sort(arr):
    def devide(arr):
        mid = int(len(arr) / 2)
        return arr[0:mid], arr[mid:]
    def merge(left, right):
        ind_l = ind_r = 0
        new_arr = []
        while ind_l < len(left) or ind_r < len(right):
            if ind_l >= len(left) and ind_r < len(right):
                new_arr.append(right[ind_r])
                ind_r += 1
            elif ind_l < len(left) and ind_r >= len(right):
                new_arr.append(left[ind_l])
                ind_l += 1
            else:
                if left[ind_l] <= right[ind_r]:
                    new_arr.append(left[ind_l])
                    ind_l += 1
                else:
                    new_arr.append(right[ind_r])
                    ind_r += 1

        return new_arr

    if len(arr) > 1:
        left, right = devide(arr)
        left = merge_sort(left)
        right = merge_sort(right)
        new_arr = merge(left, right)
        return new_arr
    else:
        return arr
profile
12년 .NET 개발 경력을 가진 웹 초짜 개발자입니다 :)

0개의 댓글