def Partition(lis:list): length = len(lis) if length == 1: return lis left = Partition(lis[:length//2]) right = Partition(lis[length//2:]) return merge(left, right) def merge(left:list, right:list): tmp = [] l_length , r_length= len(left), len(right) leftpoint = rightpoint = 0 # 当左边序列没完的时候 while leftpoint <= l_length - 1: if left[leftpoint] < right[rightpoint]: tmp.append(left[leftpoint]) leftpoint += 1 continue else: tmp.append(right[rightpoint]) rightpoint += 1 # 当右边序列排序完 if rightpoint == r_length: tmp.extend(left[leftpoint:]) break # 当正常结束的时候 说明 左边序列添加完 tmp.extend(right[rightpoint:]) return tmp
归并:先分在并
重点在于 分了之后 如何汇合分治的元素---然后小猫钓鱼