主要参考1035 插入与归并 (25分) 测试点6分析与C++示例代码_pat乙级1035测试点6-CSDN博客这篇文章改写的代码。
1035 插入与归并 (25分) 测试点6分析与C++示例代码_pat乙级1035测试点6-CSDN博客
这篇解释了测试点6
完整代码:
def cut(obj, sec):
out = []
for i in range(0, len(obj), sec):
out += sorted(obj[i:i + sec])
return out
zu = int(input())
before = list(map(int, input().split()))
after = list(map(int, input().split()))
num = 0
k = 0
while after[num] <= after[num + 1]:
num += 1
k = num
for j in range(num + 1, zu):
if after[j] != before[j]:
break
k += 1
if k == zu - 1:
print('Insertion Sort')
after[:num + 2] = sorted(after[:num + 2])
print(' '.join(map(str, after)))
else:
print('Merge Sort')
l = 2
while l <= zu:
before = cut(before, l)
if before == after:
break
l *= 2
before = cut(before, l * 2)
print(' '.join(map(str, before)))