11.排序算法_6_归并排序

时间复杂度是程序运行的时间,也可以说是次数;
空间复杂度是程序占用的空间;

6.归并排序

时间复杂度的计算:
二分查找/快排/归并,有一个共同的特点,就是将数据分为2堆。
2t = n => t = log2(n)
快排和归并每一次都要比较n次,所以时间复杂度= n*log2(n)
归并比较:只需要接着前一个数字比较就行,每一层总共比较n次。
快排比较:每一层总共和n个数字进行比较。

# coding: utf-8

def MergeSort(lists):
    if len(lists) <= 1:
        return lists
    num = int( len(lists)/2 )
    # 从中间,进行数据的拆分, 递归的返回数据进行迭代排序
    left = MergeSort(lists[:num])
    right = MergeSort(lists[num:])
    print left
    print "*"*20
    print right
    print "_"*20
    return Merge(left, right)

def Merge(left,right):
    r, l=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 += right[r:]
    result += left[l:]
    print 'result:', result
    return result

print MergeSort([1, 2, 3, 4, 5, 6, 7, 90, 21, 23, 45])

转载于:https://my.oschina.net/repine/blog/695011

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值