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)

发布了84 篇原创文章 · 获赞 10 · 访问量 8569

猜你喜欢

转载自blog.csdn.net/AK47red/article/details/103898256