题目:
在这里插入图片描述输入样例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)))