PAT1035. 插入与归并

博客围绕PAT1035题目,涉及插入和归并相关内容,虽未给出具体内容,但推测与这两种算法在该题中的应用有关,属于信息技术领域算法相关知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

def get_list(list):
    my_list = []
    for i in list:
        i = int(i)
        my_list.append(i)
    return my_list

def get_insertion(fir_list, last_list, num):
    flag = 0
    #fir_list.append('-9999')
    for i in range(num):
        if last_list[i] > last_list[i + 1]:
            flag = i + 1
            break

    #fir_list.pop(-1)
    if fir_list[flag:] == last_list[flag:]:
        list = last_list[:flag + 1]
        list.sort()
        fir_list = list + last_list[flag + 1 :]
        return True, fir_list
    else:
        return False, []

def get_next_list(fir_list_1, num, k):

    i = 0 
    j = i + k + 1
    my_list = []
    while i <= num:
        list = []
        list = fir_list_1[i:j]
        list.sort()

        i = j 
        j = i + k + 1
        my_list += list
        #print(list)
    return my_list      



num = int(input())
fir_list, last_list = input(), input()
fir_list_1, last_list_1 = fir_list.split(), last_list.split()
fir_list_2, last_list_2 = fir_list.split(), last_list.split()


fir_list_1 = get_list(fir_list_1)
fir_list_2 = get_list(fir_list_2)
last_list_1 = get_list(last_list_1)
last_list_2 = get_list(last_list_2)

list = fir_list.split()
list = get_list(list)
list.sort()
if list == last_list_1:
    pass
else:
    flag, result_list = get_insertion(fir_list_1, last_list_1, num)
    if flag:
        print("Insertion Sort")
        for i in result_list:
            if i == result_list[-1]:
                print(i)
            else:
                print(str(i) + ' ', end = '')
    else:
        print("Merge Sort")
        flag = 0
        i = 0 
        while i < num:      
            k = 2 * i + 1
            list = get_next_list(fir_list_2, num, k)
            if list == last_list_2:
                i = k
                k = 2 * i + 1   
                list = get_next_list(fir_list_2, num, k)
                break
            i = k
        for i in list:
            if i == list[-1]:
                print(i)
            else:
                print(str(i) + ' ', end = '')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值