常用算法(二)—高級算法
阿新 • • 發佈:2018-07-21
一個數 += 兩個 epc pre imp rand and src
快速排序(quick sort)
首先任意選取一個數據(通常選用數組的第一個數)作為關鍵數據,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序。
將數組分割成兩個數組之後再分別對剩下的兩個數組執行排序,這樣循環,直到剩一個元素。
import time,random import copy def cal_time(func): #該裝飾器用來測量函數運行的時間 def wrapper(*args,**kwargs): t1 = time.time() res = func(*args,**kwargs) t2 = time.time() print("%s running time: %s secs." % (func.__name__, t2 - t1)) return res return wrapper def query_sort(data,left,right): if left < right: mid = partition(data,left,right) query_sort(data,left,mid-1) query_sort(data,mid+1,right) def partition(data,left,right): temp = data[left] while left < right: while left<right and data[right] >= temp: right -=1 data[left] = data[right] while left<right and data[left] <= temp: left +=1 data[right] = data[left] data[left] = temp return left @cal_time def query_sort_h(data): query_sort(data,0,len(data)-1) @cal_time def sort_fun(data): data.sort() data = list(range(10000)) random.shuffle(data) data1 = copy.deepcopy(data) print(data) query_sort_h(data) sort_fun(data1) print(data)
常用算法(二)—高級算法