python 實現的 簡單的 快速排序 測試
阿新 • • 發佈:2018-12-07
這裡是主程式,註釋比較詳細,就不多說啦
import GenerateData from random import uniform import pickle import sys,time sys.setrecursionlimit(900)#不加這句話當操作的列表很大的時候會報錯,它用來設定允許的最大遞迴深度 GenerateData.GeneratList()#另外一個小指令碼,它會生成指定大小的數字列表並儲存在檔案中,執行一次後可以註釋 DGtimes =0#記錄遞迴呼叫次數的全域性變數 def QuickSortList(TheList):#快速排序的程式碼,修改於《演算法圖解》 global DGtimes#這裡記錄遞迴呼叫的次數,為了好玩 DGtimes+=1 if len(TheList)<2: return TheList else: randomIndex = int(uniform(0,len(TheList))) Middle = TheList.pop(randomIndex) less = [i for i in TheList[0:] if i<=Middle] #print('less-',DGtimes,': ',less) greater= [i for i in TheList[0:] if i>Middle] #print('greater-',DGtimes,': ',greater) return QuickSortList(less)+[Middle]+QuickSortList(greater) if __name__=='__main__': try: Datafile = open("C:/Users/Yun/Desktop/pythonTest/TaskData.txt",'rb') RandomValueList=pickle.load(Datafile) Datafile.close() except: print("can't onpen file, will regenerat Radom Data...") GenerateData.GeneratList() print('Data Regenerat Done, restart progeam') exit() print('Sorting...') SortTime = time.time() SortedList = QuickSortList(RandomValueList) SortTime = time.time() - SortTime print('the len of SortedList: ', len(SortedList)) print('the sortTime: ', SortTime) print('DG-times: ', DGtimes)
這裡是生成隨機資料的模組GenerateData.py , 記得放在同一目錄下哦
from random import uniform import pickle RandomValueList_Account=10000 RandomValueList_range = (0,1000) def GeneratList(): print("Generating...") Datafile = open("C:/Users/Yun/Desktop/pythonTest/TaskData.txt",'wb') RandomValueList = [] for x in range(RandomValueList_Account): RandomValueList.append(int(uniform(RandomValueList_range[0], RandomValueList_range[1]))) pickle.dump(RandomValueList, Datafile, 0) Datafile.close() return
這裡有一個問題,我覺得遞迴呼叫的次數好多啊,有沒有更優化的選擇中止的方法呢?