PAT乙级 1035插入与归并 python

易漏:测试点2是插入排序,要特别注意万一有 4 5614 5614 这种情况,此时需单独讨论。
(归并排序不可能同时会有这种情况,否则它的下一次输出是一样的。)

def insert(a, a_i,center):
    for i in range(len(a) + 1):
        a_i.append(sorted(a[0:i]) + a[i:len(a)])
    # print(a_i)
def merge(a, a_m,center):
    span = 1
    while span <= len(a):  # 当索引在a内
        index = 0  # 跨度,索引
        a_m.append([])
        while index + span <= len(a):  # 内循环排序小块
            a_m[len(a_m) - 1] += sorted(a[index:index + span])
            index += span
        else:
            a_m[len(a_m) - 1] += sorted(a[index:len(a)])
            span *= 2

n = int(input())
a = list(map(int, input().split()))
center = list(map(int, input().split()))
a_i = []
insert(a, a_i,center)
a_m = []
merge(a, a_m,center)
a_spe = []
if a == center:
    print('Insertion Sort')
    for i in range(1,len(a)):
        if a[i]>a[i-1]:
            continue
        else:
            a_spe+=sorted(a[0:i+1]) + a[i+1:len(a)]
            break
    for i in range(len(a)):
        if i == len(a) - 1:
            print(a_spe[i], end='')
        else:
            print(a_spe[i], end=' ')
else:
    for i in range(len(a_i)):
        if center == a_i[i]:
            print('Insertion Sort')
            for j in range(len(a)):
                if j == len(a) - 1:
                    print(a_i[i + 1][j], end='')
                else:
                    print(a_i[i + 1][j], end=' ')
    for i in range(len(a_m)):
        if center == a_m[i]:
            print('Merge Sort')
            for j in range(len(a)):
                if j == len(a) - 1:
                    print(a_m[i + 1][j], end='')
                else:
                    print(a_m[i + 1][j], end=' ')

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值