猫史档案馆


【Python作品分享】排序方法-归并排序【教程贴】

用户:T_MKT小艺T_MKT小艺查看:3 回复:1 评论:3 创建时间:2021-08-19T21:28:15


【作品展示】

center_image

 

【作品介绍】

计算机常用排序方法——归并排序

优点:速度快

缺点:代码多,稍不注意容易报错

 

【作品源代码】

def MergeSort_merge(l1, l2):
    l3 = []
    while True:
        i = 0
        while True:
            if l1[0] > l2[i]:
                l3.append(l2[i])
                i += 1
                if i == len(l2):
                    # 一个列表无项目,把另一个全部填下去
                    break
            else:
                break
        l3.append(l1[0])
        del l1[0]
        for j in range(0, i, 1):
            del l2[j]
        if len(l1) == 0:
            for j in range(0, len(l2), 1):
                # 一个列表无项目,把另一个全部填下去
                l3.append(l2[j])
            return l3
        if len(l2) == 0:
            for j in range(0, len(l1), 1):
                # 一个列表无项目,把另一个全部填下去
                l3.append(l1[j])
            return l3

def MergeSort(lists, order):
    if len(lists) <= 1:
        return lists
    # 分割
    a=[]
    for i in range(0, len(lists), 2):
        try:
            b = [lists[i], lists[i+1]]
            # 如果顺序则交换
            if b[0] > b[1]:
               b[0], b[1] = b[1], b[0] 
        except IndexError:
            # 奇数项列表的最后一项单独成列表
            b = [lists[i]]
        a.append(b)
    # end 分割
    # 组合
    while len(a) != 1:
        a[0] = MergeSort_merge(a[0], a[1])
        del a[1]
    # 排序后的列表实际上是“b”的第 0 项
    a = a[0]
    # 如果输入反序则倒过来
    if order == 1:
        b = []
        for i in range(1, len(a) + 1, 1):
            b.append(a[len(a) - i])
    else:
        b = a
    return b

print('输入数据,结束按英文分号')
while True:
    data=[]
    while True:
        a = input()
        if a == ';':
            b = int(input('输入0正序,输入1反序'))
            # 按分号结束,开始计算
            break
        else:
            try:
                a0 = float(a)
            except ValueError:
                # 筛掉非数字
                print('请输入整数或小数')
            else:
                # 可化简的小数化简
                if str(a0)[(len(str(a0))-2):] == '.0':
                    a0 = int(a0)
                data.append(a0)
    c = input('按0继续,按1退出')
    if c == 1:
        # 退出后结束
        print(end=None)
    else:
        # 删除,下一轮重新定义
        del data




    

 

【提示】

部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:

https://python.codemao.cn


回复

上一页1 页 / 共 1下一页
T_MKT小艺T_MKT小艺

相比之下,[1,3,2,5,6,8,7,4]

冒泡排序平均需要 0.010572 秒,

归并排序仅仅需要 0.0045462‬ 秒!

整整快了 0.0060258 秒!

点赞0


评论