首页 > 编程语言 > 详细

python数据结构与算法第十三天【归并排序】

时间:2018-08-12 11:36:14      阅读:158      评论:0      收藏:0      [点我收藏+]

1.代码实现

def merge_sort(alist):
    if len(alist) <= 1:
        return alist
    # 二分分解
    num = len(alist)/2
    left = merge_sort(alist[:num])
    right = merge_sort(alist[num:])
    # 合并
    return merge(left,right)

def merge(left, right):
    ‘‘‘合并操作,将两个有序数组left[]和right[]合并成一个大的有序数组‘‘‘
    #left与right的下标指针
    l, r = 0, 0
    result = []
    while l<len(left) and r<len(right):
        if left[l] < right[r]:
            result.append(left[l])
            l += 1
        else:
            result.append(right[r])
            r += 1
    result += left[l:]
    result += right[r:]
    return result

alist = [54,26,93,17,77,31,44,55,20]
sorted_alist = mergeSort(alist)
print(sorted_alist)

2.注意:

(1)归并排序采用的先拆分后合并的思想;递归拆分到不能继续拆分时停止拆分,然后进行比较,最后递归合并

3.时间复杂度

最优时间复杂度:O(nlogn)

最坏时间复杂度:O(nlogn)

稳定性:稳定

 

python数据结构与算法第十三天【归并排序】

原文:https://www.cnblogs.com/liuzhiqaingxyz/p/9461943.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!