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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值