zoukankan      html  css  js  c++  java
  • python算法——快速排序算法

    归并排序

     1 def merge(li, low,mid, high):
     2     i = low
     3     j = mid+1
     4     ltmp = []
     5     while i<=mid and j <=high:
     6         if li[i]<li[j]:
     7             ltmp.append(li[i])
     8             i += 1
     9         else:
    10             ltmp.append(li[j])
    11             j += 1
    12     while i<=mid:
    13         ltmp.append(li[i])
    14         i += 1
    15     while j<=high:
    16         ltmp.append(li[j])
    17         j += 1
    18     li[low:high+1]=ltmp
    19 # li = [1,5,7,8,9,2,5,7,10]
    20 # merge(li,0,len(li)//2,len(li)-1)
    21 # 本算法时间复杂度为O(n*logn)
    22 def merge_sort(li,low,high):
    23     if low<high:
    24         mid = (low+high)//2
    25         merge_sort(li,low,mid)
    26         merge_sort(li,mid+1,high)
    27         merge(li,low,mid,high)
    28 
    29 
    30 import time
    31 def timer(func):
    32     def inner(*args,**kwargs):
    33         start = time.time()
    34         ret = func(*args,**kwargs)
    35         end = time.time()
    36         print(end-start)
    37         return ret
    38     return inner
    39 @timer
    40 def outer(li,low,high):
    41     merge_sort(li,low,high)
    42 # import random
    43 # li = list(range(1000))
    44 # random.shuffle(li)
    45 # print(li)
    46 # outer(li,0,len(li)-1)   # 1000个数据费时0.004s
    47 # print(li)
    48 
    49 # li = list(range(10000))
    50 # random.shuffle(li)
    51 # print(li)
    52 # outer(li,0,len(li)-1)   # 10000个数据费时0.05s
    53 # print(li)
  • 相关阅读:
    【SICP练习】63 练习2.34
    【SICP练习】62 练习2.33
    【SICP练习】61 练习2.31-2.32
    【SICP练习】60 练习2.30
    【SICP练习】59 练习2.29
    【SICP练习】58 练习2.28
    【SICP练习】57 练习2.27
    【SICP练习】56 练习2.24-2.26
    【SICP练习】55 练习2.23
    【SICP练习】54 练习2.22
  • 原文地址:https://www.cnblogs.com/liuyankui163/p/8342573.html
Copyright © 2011-2022 走看看