Merge Sort 구현

Heejun Kim·2022년 5월 12일
0

Coding Test

목록 보기
8/51

KMOOC: 인공지능을 위한 알고리즘과 자료구조: 이론, 코딩, 그리고 컴퓨팅 사고 수업을 들은 후 Merge Sort를 구현했습니다.

# tim sort 참고, flake8 코드 스타일 적용
import time


def insertion_sort(arr, start, end):  # in-place / stable
    for i in range(start + 1, end):
        key = arr[i]
        j = i - 1

        while j >= start and arr[j] > key:
            arr[j + 1] = arr[j]
            j -= 1
        arr[j + 1] = key


def merge(arr, first, midpoint, last):
    merge_arr = []
    start = first
    mid = midpoint

    while start < midpoint and mid < last:
        if arr[start] < arr[mid]:
            merge_arr.append(arr[start])
            start += 1
        else:
            merge_arr.append(arr[mid])
            mid += 1

    while start < midpoint:
        merge_arr.append(arr[start])
        start += 1

    while mid < last:
        merge_arr.append(arr[mid])
        mid += 1

    for i in range(first, last):
        arr[i] = merge_arr[i - first]


def merge_sort(arr, first, last):
    if last - first <= 32:
        insertion_sort(arr, first, last)
    else:
        midpoint = (first + last) // 2
        merge_sort(arr, first, midpoint)
        merge_sort(arr, midpoint, last)
        merge(arr, first, midpoint, last)


# arr = [i for i in range(1000000, 0, - 1)]
arr = [i for i in range(100_000, 0, -1)]
start = time.time()
merge_sort(arr, 0, len(arr))
end = time.time()

print(arr)
print(end - start)

0개의 댓글