分治算法——归并排序

算法设计与分析

分治法——归并排序

归并排序操作过程:

在这里插入图片描述

def mergesort(seq):     #归并排序
    if len(seq) <= 1:
        return seq
    mid = int(len(seq) / 2)  # 将列表分成更小的两个列表
    # 分别对左右两个列表进行处理,分别返回两个排序好的列表
    left = mergesort(seq[:mid])
    right = mergesort(seq[mid:])
    return merging(left, right)     # 对排序好的两个列表合并,产生一个新的排序好的列表

def merging(left, right):   #合并两个已排序好的列表,产生一个新的已排序好的列表
    result = []  # 新的已排序好的列表
    i = 0  # left下标
    j = 0  # right下标
    # 对两个列表中的元素 两两对比。
    # 将最小的元素,放到result中,并对当前列表下标加1
    while i < len(left) and j < len(right):
        if left[i] <= right[j]:
            result.append(left[i])
            i += 1
        else:
            result.append(right[j])
            j += 1
    result += left[i:]
    result += right[j:]
    return result

def main():
    seq = []
    line = input().split(" ")   #输入排序数列
    for x in range(len(line)):
        seq.append(int(line[x]))
    result = mergesort(seq)     #将数列进行归并排序
    # for i in range(len(line)):   #验证是否将输入的排序数列导进
    #     print(seq[i],end=" ")
    print('\n',result)      #输出排序后的数列

if __name__=='__main__':
    main()

输入
8 3 2 9 7 1 5 4

输出
1 2 3 4 5 7 8 9

上一篇文章———>Java GPS数据处理 Mooc

下一篇文章———>《分治法——快速排序》

发布了14 篇原创文章 · 获赞 16 · 访问量 507

猜你喜欢

转载自blog.csdn.net/weixin_43347550/article/details/104990977