# __author:   han-zhang
# date:  2019/1/25 19:29

def merge(a, b):
    c = []
    i = j = 0
    while i < len(a) and j < len(b):
        if a[i] < b[j]:
            c.append(a[i])
            i += 1
        else:
            c.append(b[j])
            j += 1

    # 如果i已经移出去了,而j还未移完,则遍历j的后半部分,一次追加,反之亦然
    if i == len(a):
        for k in b[j:]:
            c.append(k)
    else:
        for h in a[i:]:
            c.append(h)
    return c


def merge_sort(lists):
    if len(lists) <= 1:
        return lists
    middle = len(lists) // 2
    left = merge_sort(lists[:middle])
    right = merge_sort(lists[middle:])
    print("left", left)
    print("right", right)
    return merge(left, right)


if __name__ == "__main__":
    nums = [9, -2, 7, 5, 3, 7, 4, 8, 3, 2, 1]
    nums1 = merge_sort(nums)
    print(nums1)