Python 排序算法之归并排序

"""
归并排序
1. 实现合并两个有序数组
2. 根据中间一个元素将数组一分为二,分别调用自身
3. 将两部分排好序的数组合并
"""
# c = [*a, *b]
# print(sorted(c))

# 合并两个有序数组
def merge_sorted_list(a, b):
    length_a, length_b = len(a), len(b)
    i = j = 0
    res = []
    while i < length_a and j < length_b:
        if a[i] < b[j]:
           res.append(a[i])
           i += 1
        else:
            res.append(b[j])
            j += 1
    if i < length_a:
        res.extend(a[i:])
    else:
        res.extend(b[j:])
    return res


def test_merge_sorted_list():
    a = [1, 2, 5]
    b = [0, 3, 4, 8]
    c = merge_sorted_list(a, b)
    print(c)


# test_merge_sorted_list()

# 分治法三步走。注意递归出口
def mergesort(array):
    if len(array) < 2:
        return array
    else:
        mid = int(len(array) // 2)
        right_half = mergesort(array[mid:])
        left_half = mergesort(array[:mid])
        return merge_sorted_list(left_half, right_half)


def test_mergesort():
    import random
    ll = list(range(10))
    random.shuffle(ll)
    print(ll)
    print(mergesort(ll))


test_mergesort()
posted @ 2021-03-26 21:12  皎然CEO  阅读(155)  评论(0编辑  收藏  举报