程序填空题:归并排序 - 实验13 从前有座山, 山里有座庙 - 《Python编程基础及应用实验教程》 - 高教社
归并排序是一种使用分治法的排序算法。请结合下述伪代码所描述的算法思想,将下述程序补充完整,使其可以正常运行。
具体的分治算法思想请参考实验教程。<br>
![image.png](~/a2d843f3-ab7b-4de4-a40f-1850b6fb276a.png)
![image.png](~/0559e1fb-d718-473d-8722-58642dd42534.png)
<br>
python
def merge_sort(lst):
if len(lst) <= 1:
return lst
middle = len(lst) // 2
left = merge_sort(lst[:middle])
right =
return merge(left,right)
def merge(A,B):
if len(A) == 0:
return B
if len(B) == 0:
return A
if A[0] > B[0]:
return [B[0]] + merge(A,B[1:])
else:
return
lst = [-9,10,1,5,3,7,8,10]
print(merge_sort(lst))
期望的执行结果为:
[-9, 1, 3, 5, 7, 8, 10, 10]
答案:
第1空:merge_sort(lst[middle:])
第2空:[A[0]] + merge(A[1:],B)
具体的分治算法思想请参考实验教程。<br>
![image.png](~/a2d843f3-ab7b-4de4-a40f-1850b6fb276a.png)
![image.png](~/0559e1fb-d718-473d-8722-58642dd42534.png)
<br>
python
def merge_sort(lst):
if len(lst) <= 1:
return lst
middle = len(lst) // 2
left = merge_sort(lst[:middle])
right =
return merge(left,right)
def merge(A,B):
if len(A) == 0:
return B
if len(B) == 0:
return A
if A[0] > B[0]:
return [B[0]] + merge(A,B[1:])
else:
return
lst = [-9,10,1,5,3,7,8,10]
print(merge_sort(lst))
期望的执行结果为:
[-9, 1, 3, 5, 7, 8, 10, 10]
答案:
第1空:merge_sort(lst[middle:])
第2空:[A[0]] + merge(A[1:],B)