数据结构:归并排序python
Posted Roronoa-Zoro
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构:归并排序python相关的知识,希望对你有一定的参考价值。
思路,将一个数组不断拆分,拆到一个元素之后,倒过来一步步排好序,获得新的数组
[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)
结果:
以上是关于数据结构:归并排序python的主要内容,如果未能解决你的问题,请参考以下文章