Python:归并排序算法

来源:互联网 发布:电脑屏幕录像软件推荐 编辑:程序博客网 时间:2024/06/06 02:25


归并排序算法:空间复杂度为O(n),时间复杂度为O(n log n),算法稳定,不具有适应性

1、将序列分两左右两部分

2、递归,重复第一步,直到左右两部分里面的元素数量为1

3、合并每个左右的部分,从小到大

4、完成合并

算法的稳定性是指:对于待排序的序列中,相同项的原来次序不能被改变

算法的适应性是指:算法因原序列有序而更高效


def merge_sort(lst):    if len(lst) <= 1:        return lst    mid = len(lst) // 2    print 'left: ', lst[: mid]    print 'right: ', lst[mid:]    print '&&&&&'    left = merge_sort(lst[: mid])    right = merge_sort(lst[mid:])    return merge(left, right)def merge(left, right):    print 'left: ', left    print 'right: ', right    res = []    i, j = 0, 0    while i < len(left) and j < len(right):        if left[i] <= right[j]:            res.append(left[i])            i += 1        else:            res.append(right[j])            j += 1    res += left[i:]    res += right[j:]    print 'res: ', res    print '***'    return res