标签:技术 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