归并排序操作过程:
def mergesort(seq): #归并排序
if len(seq) <= 1:
return seq
mid = int(len(seq) / 2) # 将列表分成更小的两个列表
# 分别对左右两个列表进行处理,分别返回两个排序好的列表
left = mergesort(seq[:mid])
right = mergesort(seq[mid:])
return merging(left, right) # 对排序好的两个列表合并,产生一个新的排序好的列表
def merging(left, right): #合并两个已排序好的列表,产生一个新的已排序好的列表
result = [] # 新的已排序好的列表
i = 0 # left下标
j = 0 # right下标
# 对两个列表中的元素 两两对比。
# 将最小的元素,放到result中,并对当前列表下标加1
while i < len(left) and j < len(right):
if left[i] <= right[j]:
result.append(left[i])
i += 1
else:
result.append(right[j])
j += 1
result += left[i:]
result += right[j:]
return result
def main():
seq = []
line = input().split(" ") #输入排序数列
for x in range(len(line)):
seq.append(int(line[x]))
result = mergesort(seq) #将数列进行归并排序
# for i in range(len(line)): #验证是否将输入的排序数列导进
# print(seq[i],end=" ")
print('\n',result) #输出排序后的数列
if __name__=='__main__':
main()
输入
8 3 2 9 7 1 5 4
输出
1 2 3 4 5 7 8 9