归并排序

from timeit import Timer

def back_sort(lis):
    n= len(lis)
    if n == 1:
        return (lis)
    mid = n//2
    left_sorted = back_sort(lis[:mid])
    right_sorted = back_sort(lis[mid:])
    n_left = len(left_sorted)
    n_right = len(right_sorted)
    left_start = 0
    right_start = 0
    merged_lis = []   
    while left_start < n_left and right_start <n_right:
        if left_sorted[left_start] <= right_sorted[right_start]:
            merged_lis.append(left_sorted[left_start])
            left_start += 1    
        else: 
            merged_lis.append(right_sorted[right_start])
            right_start += 1
           
    merged_lis += left_sorted[left_start:]             
    merged_lis += right_sorted[right_start:]
    return merged_lis 
 
def merge_sort(lis,start,end):
    if start == end:
        return [lis[start]]
    mid = (start+end)//2
    right_sorted = merge_sort(lis,mid+1,end)   
    left_sorted = merge_sort(lis,start,mid)
    n_left = len(left_sorted)
    n_right = len(right_sorted)
    left_start = 0
    right_start = 0
    merged_lis = []   
    while left_start < n_left and right_start <n_right:
        if left_sorted[left_start] <= right_sorted[right_start]:
            merged_lis.append(left_sorted[left_start])
            left_start += 1    
        else: 
            merged_lis.append(right_sorted[right_start])
            right_start += 1          
    merged_lis += left_sorted[left_start:]             
    merged_lis += right_sorted[right_start:]
    
    return merged_lis 
    
    
if __name__ == "__main__":
    lis = [49,38,65,97,76,13,27,49]
    n = len(lis)-1
    print(back_sort(lis))
    print(merge_sort(lis,0,n))
    t1 = Timer('back_sort(%s)'%lis, 'from __main__ import back_sort')
    t2 = Timer('merge_sort(%s,%s,%s)'%(lis,0,n), 'from __main__ import merge_sort')
    #t1 = Timer('back_sort(lis)', 'from __main__ import back_sort;lis=[49,38,65,97,76,13,27,49]')
    #t2 = Timer('merge_sort(lis,start,end)', 'from __main__ import merge_sort;lis=[49,38,65,97,76,13,27,49];start = 0; end = len(lis)-1')
    print(t1.timeit(number=1000))
    print(t2.timeit(number=1000))


在这里插入图片描述
注:
1)向Timer 函数里面传入参数时,如果变量定义在外面,那么要用
t1 = Timer(‘back_sort(%s)’%lis, ‘from main import back_sort’)
t2 = Timer(‘merge_sort(%s,%s,%s)’%(lis,0,n), ‘from main import merge_sort’)
的方式引入。不然系统会提示xxx为定义。这是我踩过的坑,多亏站内小伙伴提点,在这里记录一下以后就不会再犯了。

2)还有第二种方式,就是把参数写在内部,语句之间用分号隔开
t1 = Timer(‘back_sort(lis)’, ‘from main import back_sort;lis=[49,38,65,97,76,13,27,49]’)
t2 = Timer(‘merge_sort(lis,start,end)’, ‘from main import merge_sort;lis=[49,38,65,97,76,13,27,49];start = 0; end = len(lis)-1’)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值