在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Python/ 做時(shí)間復(fù)雜度試驗(yàn),插入排序首次運(yùn)行與第二次運(yùn)行結(jié)果不一,且慢于選擇排序?

做時(shí)間復(fù)雜度試驗(yàn),插入排序首次運(yùn)行與第二次運(yùn)行結(jié)果不一,且慢于選擇排序?

以下是測(cè)試代碼,插入排序前后結(jié)果分別為14.3S、8.7s

選擇排序前后結(jié)果均為6S左右

import functools, random, time

list = [random.random() for i in range(1,10000)]

def timer(func):
    @functools.wraps(func)
    def wrapper(*args, **kw):
        t0 = time.time()
        result = func(*args, **kw)
        t1 = time.time()
        print('Total running time %s : %s'
            %(func.__name__, str(t1 - t0))
            )
        return func(*args, **kw)
    return wrapper

@timer
def insert_sort(L):
    for i in range(1, len(L)):
        key = L[i]
        j = i - 1
        while j >= 0:
            if L[j] > key:
                L[j + 1],L[j] = L[j],key
            j -= 1
    return L

@timer    
def select_sort(lists):
    count = len(lists)
    for i in range(0, count):
        min = i
        for j in range(i + 1, count):
            if lists[min] > lists[j]:
                min = j
        lists[min], lists[i] = lists[i], lists[min]
    return lists

@timer
def my_sort(lists):
    return sorted(lists)

my_sort(list)
insert_sort(list)
select_sort(list)
insert_sort(list)
select_sort(list)
回答
編輯回答
尐潴豬

因?yàn)槟愕牟迦肱判蚝瓦x擇排序都是對(duì)原序列排序,排序后就已經(jīng)是好序了


import functools, random, time, copy

list = [random.random() for i in range(1,10000)]

def timer(func):
    @functools.wraps(func)
    def wrapper(*args, **kw):
        t0 = time.time()
        result = func(*args, **kw)
        t1 = time.time()
        print('Total running time %s : %s'
            %(func.__name__, str(t1 - t0))
            )
        return func(*args, **kw)
    return wrapper

@timer
def insert_sort(l):
    L = copy.copy(l)
    for i in range(1, len(L)):
        key = L[i]
        j = i - 1
        while j >= 0:
            if L[j] > key:
                L[j + 1],L[j] = L[j],key
            j -= 1
    return L

@timer    
def select_sort(l):
    lists = copy.copy(l)
    count = len(lists)
    for i in range(0, count):
        min = i
        for j in range(i + 1, count):
            if lists[min] > lists[j]:
                min = j
        lists[min], lists[i] = lists[i], lists[min]
    return lists

@timer
def my_sort(lists):
    return sorted(lists)

out = my_sort(list)
out = insert_sort(list)
out = select_sort(list)
out = insert_sort(list)
out = select_sort(list)

copy一下,兩次排序時(shí)間基本一致

2018年2月16日 07:59