归并排序

看了下归并排序,总体来说思想很简单,实现起来也不是很难。

原理

用图说明就好啦,归并排序是基于分而治之的思想,主要分为两步,一步是“分”,另一步是“治”,就是将要排序的列表不断地分解,分解到只有一个元素,然后在进行排序,将排序好的子列表再进行合并。**时间复杂度为O(nlogn)


image.png

image.png

代码

def merge_sort(a_list):
    if len(a_list)<=1:
        return a_list
    if len(a_list)>1:
        mid=len(a_list)//2
        left_half=merge_sort(a_list[:mid])
        right_half=merge_sort(a_list[mid:])
        i=0
        j=0
        res=[]
        while i<len(left_half) and j<len(right_half):
            if left_half[i]<right_half[j]:
                res.append(left_half[i])
                i+=1
            else:
                res.append(right_half[j])
                j+=1
        if i<len(left_half):
            res+=left_half[i:]
            
        if j<len(right_half):
            res+=right_half[j:]
        return res

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容