码迷,mamicode.com
首页 > 编程语言 > 详细

数据结构:归并排序python

时间:2020-05-18 18:18:53      阅读:64      评论:0      收藏:0      [点我收藏+]

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

  结果:技术图片

 

数据结构:归并排序python

标签:技术   print   src   慢慢   ret   开始   code   排序   数组   

原文地址:https://www.cnblogs.com/cong3Z/p/12912007.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!