常用算法及效率分析

算法即解決問題的方法,算法的核心就是爲了提升性能

so

冒泡排序

冒泡一:

#_*_coding:utf-8_*_

'''
 冒泡排序
'''

import random,time


l=range(1000)
print(l)

random.shuffle(l)
print(l)


def timer(func):
    def _wrapper(*args,**kwargs):
        start_time=time.time()
        res=func(*args,**kwargs)
        stop_time=time.time()
        print('the func %s run time is %s' %(func,stop_time-start_time))
    return _wrapper

@timer
def bubble_sort(l):
    for j in reversed(range(len(l))):
        for i in range(len(l)-1):
            if l[i] > l[i+1]:
                tmp=l[i]
                l[i]=l[i+1]
                l[i+1]=tmp
                #l[i],l[i+1]=l[i+1],l[i]
    print(l)


bubble_sort(l)

運行:

the func bubble_sort run time is 0.110095024109

冒泡2(改進:減少算法執行頻度)

#_*_coding:utf-8_*_

'''
 冒泡排序
'''

import random,time


l=range(1000)
print(l)

random.shuffle(l)
print(l)


def timer(func):
    def _wrapper(*args,**kwargs):
        start_time=time.time()
        res=func(*args,**kwargs)
        stop_time=time.time()
        print('the func %s run time is %s' %(func.__name__,stop_time-start_time))
    return _wrapper

@timer
def bubble_sort(l):
    for j in reversed(range(len(l))):
        for i in range(len(l)-1):
            if l[i] > l[i+1]:
                l[i],l[i+1]=l[i+1],l[i]
    print(l)


bubble_sort(l)


運行:
the func bubble_sort run time is 0.105001926422

冒泡3(改進:循環條件不要進行運算操作)

#_*_coding:utf-8_*_

'''
 冒泡排序
'''

import random,time

l=range(1000)

print(l)
random.shuffle(l)
print(l)



def timer(func):
    def _wrapper(*args,**kwargs):
        start_time=time.time()
        res=func(*args,**kwargs)
        stop_time=time.time()
        print('the func %s run time is %s' %(func.__name__,stop_time-start_time))
        return res
    return _wrapper

@timer
def bubble_sort(l):
    l1 = reversed(range(len(l)))
    l2 = range(len(l) - 1)
    for j in l1:
        for i in l2:
            if l[i] > l[i+1]:
                l[i],l[i+1]=l[i+1],l[i]

    print(l)

bubble_sort(l)

運行:
the func bubble_sort run time is 0.0980820655823



選擇排序

#_*_coding:utf-8_*_

'''
 選擇排序:
 1.核心原理:每次比較的成果是取出最小值的索引,然後和未排序的第一個值交換順序(第一次比較,未排序的第一個值的索引就是0)
 2.實現:兩個for循環,外層循環控制未排序值的比較次數,內層循環控制每次取一個最小的值放左邊
'''

import random,time

l=range(1000)

print(l)
random.shuffle(l)
print(l)


def timer(func):
    def _wrapper(*args,**kwargs):
        start_time=time.time()
        res=func(*args,**kwargs)
        stop_time=time.time()
        print('the func %s run time is %s' %(func,stop_time-start_time))
        return res
    return _wrapper

@timer
def choice_sort(l):

    for j in range(len(l)):
        smallest_index=j
        for i in range(j,len(l)):
            if l[i] < l[smallest_index]:
                smallest_index = i

        l[j],l[smallest_index]=l[smallest_index],l[j]

        print(l)


choice_sort(l)

運行:

the func choice_sort run time is 0.0295298099518


插入排序

#_*_coding:utf-8_*_

'''
 插入排序:
 1.核心原理:
 2.實現:
'''

import random,time

l=range(1000)

print(l)
random.shuffle(l)
print(l)


def timer(func):
    def _wrapper(*args,**kwargs):
        start_time=time.time()
        res=func(*args,**kwargs)
        stop_time=time.time()
        print('the func %s run time is %s' %(func,stop_time-start_time))
        return res
    return _wrapper

@timer
def insert_sort(l):
    for j in range(len(l)):
        position=j
        while position > 0 and l[position] < l[position-1]:
            l[position],l[position-1]=l[position-1],l[position]
            position-=1



insert_sort(l)

運行:
the func insert_sort run time is 0.0595319271088


持續整理中。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章