标签:技术 print src 慢慢 ret 开始 code 排序 数组
思路,将一个数组不断拆分,拆到一个元素之后,倒过来一步步排好序,获得新的数组
[55,23,66,905,56,85,356,30,57,34,832,230]
left=[55,23,66,905,56,85] right=[356,30,57,34,832,230]
left可以看成一个新数组,继续拆分
left_1=[55,23,66] right_1=[905,56,85] left_2=[356,30,57] right_2=[34,832,230]
55 23,66 905 56,85 356 30,57 34 832,230
55 23 66 905 56 85 356 30 57 34 832 230
下面就可以慢慢开始向上排序
55 23,66 905 56,85 356 30,57 34 230,832
详细比较过程:引入了两个指针,分别指向当前小序列左右两边的第一个元素,所以一开始55跟23比,23小,将23提出来,并将left_pointer指向66,55再跟66比,提55出,最后把66提出来
def merge_sort(alist): n=len(alist) if n<=1: return alist num=n//2 left=merge_sort(alist[:num]) right=merge_sort(alist[num:]) result=[] left_p=0 right_p=0 while left_p<len(left) and right_p<len(right): if left[left_p]<=right[right_p]: result.append(left[left_p]) left_p=left_p+1 else: result.append(right[right_p]) right_p=right_p+1 result+=left[left_p:] result+=right[right_p:] return result a=[55,23,66,905,56,85,356,30,57,34,832,230] print(a) b=merge_sort(a) print(a) print(b)
结果:
标签:技术 print src 慢慢 ret 开始 code 排序 数组
原文地址:https://www.cnblogs.com/cong3Z/p/12912007.html