python 实现的 简单的 快速排序 测试

这里是主程序,注释比较详细,就不多说啦 

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

这里有一个问题,我觉得递归调用的次数好多啊,有没有更优化的选择中止的方法呢?

猜你喜欢

转载自blog.csdn.net/u012129946/article/details/84872541