递归合并排序(递归与分治)
问题描述】使用递归合并排序算法对若干整数进行排序
【输入形式】在屏幕上输入若干整数,各数间都以一个空格分隔。
【输出形式】输出每次划分的结果和最终从小到大排序好的结果。
【样例输入】
48 38 65 97 76 13 27
【样例输出】
[48 38 65 97 76 13 27]
[48 38 65 97]
[48 38]
[48]
[38]
[65 97]
[65]
[97]
[76 13 27]
[76 13]
[76]
[13]
[27]
[13 27 38 48 65 76 97]
【样例说明】
输入:7个整数,以空格分隔。
输出:输出每次划分的结果和最终从小到大排序好的结果。起始和结束加方框号。
【评分标准】根据输入得到准确的输出
注意要输出中间结果。
import numpy as np
def MergeSort(arr, l, r):
print(arr[l:r+1])
if l < r:
p = (l + r) // 2
MergeSort(arr,l,p)
MergeSort(arr,p+1,r)
Merge(arr,l,p,r)
return arr
def Merge(arr, p, q, r):
n1 = q - p + 1
n2 = r - q
L = []
R = []
for i in range(0, n1):
L.append(arr[p + i])
for j in range(0, n2):#注意下标
R.append(arr[q + j + 1])#原来是arr[q+j]wa,右边部分是从下标q+1开始的
L.append(1e8)#设置为无穷大
R.append(1e8)
i = j = 0
for k in range(p, r+1):
if L[i] <= R[j]:
arr[k] = L[i]
i = i+1
else:
arr[k] = R[j]
j = j+1
return arr
def main():
arr = np.array(list(map(int, input().split())))
n = len(arr)
MergeSort(arr, 0, n-1)
print(arr)
if __name__ == '__main__':
main()