アルゴリズム勉強 #3 マージソートをpythonで実装する
2021.10.25
今回はマージソートです!
  • 配列を2分割を繰り返す
  • left, rightで1こずつになったら、小さい順からマージ
  • 計算量はO(nlogn)

試したコード

python
## merge sort
import random

def merge_sort(array):
    if len(array) == 1:
        return array

    mid = len(array) // 2
    left = array[0:mid]
    right = array[mid:]
    
    left = merge_sort(left)
    right = merge_sort(right)
    
    return merge(left, right)

def merge(left, right):
    merged = []
    i = 0
    j = 0

    while i < len(left) and j < len(right):
        if left[i] <= right[j]:
            merged.append(left[i])
            i += 1
        else:
            merged.append(right[j])
            j += 1

    if i < len(left):
        merged.extend(left[i:])
    else:
        merged.extend(right[j:])
    return merged


array = [i+1 for i in range(10)]
random.shuffle(array)
merge_sort(array)

References