数据结构:归并排序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)

  结果:

 

posted @ 2020-05-18 17:43  Roronoa-Zoro  阅读(155)  评论(0编辑  收藏  举报