PTA1035 插入与归并 (25分)(第二个测试点未通过)

 代码结构,调试的心力交瘁。第二个测试点还是无法通过,主要问题是在插入排序上。例如当输入  3    1 3 2     1 3 2 时,这里存在歧义。但是很明显题目将它判定为第二次遇到  1 3 2,所以此时要输出 1 2 3,而不是 1 3 2。

 

N = input()
s1 = input()
s2 = input()
s3 = s2
num = []
num = list(s1.split())
#插入排序:
num_sort = []
num_sort.append(num[0])
i = 1
j = 0
s2 += ' '
flag = 0
while i < len(num):
    s = ''
    for item in num_sort:
        s += str(item) + ' '
    k = i
    while k < len(num):
        s += str(num[k]) + ' '
        k += 1
    if flag == 1:
        # if T == 1:
        #     j = 0
        #     if i == len(num):
        #         i = i -1
        #     while j < len(num_sort):
        #         if int(num[i]) > int(num_sort[-1]):
        #             num_sort.append(num[i])
        #             break
        #         if int(num[i]) < int(num_sort[j]) and int(num[i]) > int(num_sort[j - 1]):
        #             num_sort.insert(j, num[i])
        #             break
        #         j += 1
        #     i += 1
        s = ''
        for item in num_sort:
            s += str(item) + ' '
        k = i
        while k < len(num):
            s += str(num[k]) + ' '
            k += 1
        print("Insertion Sort")
        s = s[0 : -1]
        print(s)
        exit(0)
    if s == s2:
        flag = 1
    j = 0
    while j < len(num_sort):
        if int(num[i]) > int(num_sort[-1]):
            num_sort.append(num[i])
            break
        if int(num[i]) < int(num_sort[j]):
            num_sort.insert(j, num[i])
            break
        j += 1
    i += 1

#归并排序
def sort_list(list_1, list_2):
    i, j = 0, 0
    L = []
    while i < len(list_1) and j < len(list_2):
        if list_1[i] < list_2[j]:
            L.append(list_1[i])
            i += 1
        else:
            L.append(list_2[j])
            j += 1
    if i < len(list_1):
        L += list_1[i : ]
    if j < len(list_2):
        L += list_2[j : ]
    List.append(L)
def cut_list(l):
    i = 0
    if str(type(l[i])) == "<class 'int'>":
        if len(l) % 2 == 0:
            while i < len(l):
                Lt = []
                if l[i] < l[i + 1]:
                    Lt.append(l[i])
                    Lt.append(l[i+1])
                    List.append(Lt)
                else:
                    Lt.append(l[i + 1])
                    Lt.append(l[i])
                    List.append(Lt)
                i += 2
        else:
            while i < len(l) - 1:
                Lt = []
                if l[i] < l[i + 1]:
                    Lt.append(l[i])
                    Lt.append(l[i+1])
                    List.append(Lt)
                else:
                    Lt.append(l[i + 1])
                    Lt.append(l[i])
                    List.append(Lt)
                i += 2
            Lt = []
            Lt.append(l[-1])
            List.append(Lt)
    else:
        if len(l) % 2 == 0:
            while i < len(l):
                sort_list(l[i], l[i + 1])
                i += 2
        else:
            while i < len(l) - 1:
                sort_list(l[i], l[i + 1])
                i += 2
            List.append(l[-1])

num_list = []
for item in num:
    num_list.append(int(item))
List = []
cut_list(num_list)
Flag = 0
while len(List) != 1:
    List_main = List
    str_List = str(List_main)
    str_List = str_List.replace('[', '')
    str_List = str_List.replace(']', '')
    str_List = str_List.replace(',', '')
    if str_List == s3:
        Flag = 1
    List_main = List
    List = []
    cut_list(List_main)
    if Flag == 1:
        str_List = str(List)
        str_List = str_List.replace('[', '')
        str_List = str_List.replace(']', '')
        str_List = str_List.replace(',', '')
        print("Merge Sort")
        print(str_List)
        exit(0)

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值