易漏:测试点2是插入排序,要特别注意万一有 4 5614 5614 这种情况,此时需单独讨论。
(归并排序不可能同时会有这种情况,否则它的下一次输出是一样的。)
def insert(a, a_i,center):
for i in range(len(a) + 1):
a_i.append(sorted(a[0:i]) + a[i:len(a)])
# print(a_i)
def merge(a, a_m,center):
span = 1
while span <= len(a): # 当索引在a内
index = 0 # 跨度,索引
a_m.append([])
while index + span <= len(a): # 内循环排序小块
a_m[len(a_m) - 1] += sorted(a[index:index + span])
index += span
else:
a_m[len(a_m) - 1] += sorted(a[index:len(a)])
span *= 2
n = int(input())
a = list(map(int, input().split()))
center = list(map(int, input().split()))
a_i = []
insert(a, a_i,center)
a_m = []
merge(a, a_m,center)
a_spe = []
if a == center:
print('Insertion Sort')
for i in range(1,len(a)):
if a[i]>a[i-1]:
continue
else:
a_spe+=sorted(a[0:i+1]) + a[i+1:len(a)]
break
for i in range(len(a)):
if i == len(a) - 1:
print(a_spe[i], end='')
else:
print(a_spe[i], end=' ')
else:
for i in range(len(a_i)):
if center == a_i[i]:
print('Insertion Sort')
for j in range(len(a)):
if j == len(a) - 1:
print(a_i[i + 1][j], end='')
else:
print(a_i[i + 1][j], end=' ')
for i in range(len(a_m)):
if center == a_m[i]:
print('Merge Sort')
for j in range(len(a)):
if j == len(a) - 1:
print(a_m[i + 1][j], end='')
else:
print(a_m[i + 1][j], end=' ')