1.分值策略
首先是把真个列表分成无数个小元素。
然后合并小元素,得到有序列表。
所以第一步就是递归调用
def mergeSort(self, nums,lo, hi):
if hi == lo : return
mi = (lo + hi) // 2
self.mergeSort(nums,lo, mi)
self.mergeSort(nums,mi+1, hi)
self.merge(nums,lo, mi, hi)# 二路归并
第二步,采用二路归并合并元素,得到顺序列表
def merge(self,nums , lo, mi, hi):
temp = []
i,j=lo,mi+1
while i<=mi or j<=hi:
if i>mi or (j<=hi and nums[j]<nums[i]):# i>mi 说明前半段已经没了,所以只能把后面的加上去
temp.append(nums[j])
j+=1
else:
temp.append(nums[i])
i+=1
nums[lo:hi+1]=temp#hi+1 是因为【;) 左闭右开
二路归并图示: