这里是主程序,注释比较详细,就不多说啦
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
这里有一个问题,我觉得递归调用的次数好多啊,有没有更优化的选择中止的方法呢?