PAT乙级 1035 插入与归并

Coral ·
更新时间:2024-11-13
· 713 次阅读

题目:
在这里插入图片描述
在这里插入图片描述输入样例1:

10 3 1 2 8 7 5 9 4 6 0 1 2 3 7 8 5 9 4 6 0

输出样例1:

Insertion Sort 1 2 3 5 7 8 9 4 6 0

输入样例2:

10 3 1 2 8 7 5 9 4 0 6 1 3 2 8 5 7 4 9 0 6

输出样例2:

Merge Sort 1 2 3 8 4 5 7 9 0 6

分析:
这道题只有两种情况,要么是插入排序,要么是归并排序。
相比而言,我们更容易发现插入排序的规律,故先判断是否是插入排序,那么就循环获取插入排序的下一步结果直到与中间结果相等,那么按题目要求输出;
若得到最终排序结果后仍没能与中间结果相等则是归并排序,题中的归并是两边同时开始的,那么就循环获取归并的下一步结果直到与中间结果相等按题目要求输出。
代码如下(Python):

n = int(input()) c = [int(x) for x in input().split()] # 未排序数列 m = [int(x) for x in input().split()] # 中间结果 flag = False for i in range(2, n): # 判断是否是插入排序 t1 = c[:i] t1.sort() t1.extend(c[i:]) if flag: print('Insertion Sort') print(' '.join(map(str, t1))) break if t == m: # 发现相等后再获取一个结果再输出 flag = True if not flag: # 到这一步已经判定是归并排序 print('Merge Sort') k = 1 t2 = [] while not flag: if t == m: # 发现相等后再获取一个结果再输出 flag = True t2 = [] k *= 2 for i in range(n//k): # 每执行一次就得到归并的下一步结果 t2 += sorted(c[i*k:(i+1)*k]) t2 += sorted(c[n-n%k:n]) print(' '.join(map(str, t2)))
作者:~豆沙味的旺仔



pat

需要 登录 后方可回复, 如果你还没有账号请 注册新账号
相关文章