見出し画像

独学コンピューターサイエンティストのマージソートサンプルプログラムを無駄に改造してみた・・・

タイトルの通り、独学コンピューターサイエンティスト p87 のマージソートサンプルプログラムを、無駄に改造してみました。それだけです。(汗)

# 独学コンピューターサイエンティストのマージソートサンプルプログラムを無駄に改造してみた・・・

def merge_sort(a_list):
    if len(a_list) != 1 and a_list:  # 改造! and a_list は空リスト対策。オリジナルは if len(a_list) > 1: 
        mid = len(a_list) // 2
        left = a_list[:mid]
        right = a_list[mid:]
        merge_sort(left)
        merge_sort(right)

        left_i = 0
        right_i = 0
        alist_i = 0
        while (
            left_i != len(left) and  # 改造! オリジナルは left_i < len(left) and
            right_i != len(right)    # 改造! オリジナルは right_i < len(right)
        ):
            if left[left_i] <= right[right_i]:
                a_list[alist_i] = left[left_i]
                left_i += 1
            else:
                a_list[alist_i] = right[right_i]
                right_i += 1
            alist_i += 1

        while left_i != len(left):    # 改造! オリジナルは while left_i < len(left):
            a_list[alist_i] = left[left_i]
            left_i += 1
            alist_i += 1

        while right_i != len(right):  # 改造! オリジナルは while right_i < len(right):
            a_list[alist_i] = right[right_i]
            right_i += 1
            alist_i += 1
    return a_list


# merge_sort関数を実行するために以下を追加。。。

list = [103, 8, 10, 33, 4, 1]
print(list, '=>', merge_sort(list[:]))


出力結果

[103, 8, 10, 33, 4, 1] => [1, 4, 8, 10, 33, 103]




#独学コンピューターサイエンティスト
#独CS #selftaughtcoder
#Python #Python3
#マージソート