- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
python实现快速排序的几种方法
python实现快速排序的几种方法快速排序算法说明:设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用中间的数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。一趟快速排序的算法是:1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;2)以第一个数组元素作为关键数据,赋值给key,即key=A[0];3)从j开始向前搜索,即由后开始向前搜索(j -- ),找到第一个小于key的值A[j];4)从i开始向后搜索,即由前开始向后搜索(i ++ ),找到第一个大于key的A[i],A[i]与A[j]交换;5)重复第3、4、5步,直到 I=J; (3,4步中,没找到符合条件的值,即3中A[j]不小于key,4中A[j]不大于key的时候改变j、i的值,使得j=j-1,i=i+1,直至找到为止。找到符合条件的值,进行交换的时候i, j指针位置不变。另外,i==j这一过程一定正好是i+或j-完成的时候,此时令循环结束)。(注:以上说明摘自百度百科)方法一:经典快速排序算法下面的代码中是经典快速排序算法,并且范围正序和倒序两种排列方式:#正序排列函数defqiucksortasc(arr,begin,end): #设定取出开始的第一个值用于判断key=arr[begin] #从左边开始找大于key值的元素下标pl=begin #从右边开始找小于key值的元素下标pr=endwhile 1: #找到从右边开始第一个小于key的元素,如果大于key,pr-1继续寻找whilearr[pr]key:pr=pr-1 #找到从左边开始第一个大于key的元素,如果小于key,pl+1继续寻找whilearr[pl]key:pl=pl+1 #交换arr[pr]和arr[pl]的值arr[pl],arr[pr]=arr[pr],arr[pl] print pl is %d and pris %d %(pl,pr), and ,arr #当pr和pl相等的时候跳出循环ifpl==pr: print 完成一趟快排 break; #递归开始 #对key左边的元素开始排序if(pl+1end):qiucksortasc(arr,pl+1,end) #对key右边的元素开始排序if(pr-1begin):qiucksortasc(arr,begin,pr-1)#倒序排列函数defqiucksortdesc(arr,begin,end): #设定取出开始的第一个值用于判断key=arr[begin] #从左边开始找大于key值的元素下标pl=begin #从右边开始找小于key值的元素下标pr=endwhile 1: #找到从右边开始第一个大于key的元素,如果小于key,pr-1继续寻找whilearr[pr]key:pr=pr-1 #找到从左边开始第一个小于key的元素,如果大于key,pl+1继续寻找whilearr[pl]key:pl=pl+1 #交换arr[pr]和arr[pl]的值arr[pl],arr[pr]=arr[pr],arr[pl] print pl is %d and pris %d %(pl,pr), and ,arr #当pr和pl相等的时候跳出循环ifpl==pr: print 完成一趟快排break; #递归开始 #对key左边的元素开始排序if(pl-1begin):qiucksortdesc(arr,begin,pl-1) #对key右边的元素开始排序if(pr+1end):qiucksortdesc(arr,pr+1,end)#初始化需要排序的数组a=[4,2,1,5,3,7,6,8,9]print 排序前数组:,a#调用排序函数print ******************print 正序排序过程qiucksortasc(a,0,len(a)-1)print 正序排序后数组:,aprint ******************a=[4,2,1,5,3,7,6,8,9]print ******************print 倒序排序过程qiucksortdesc(a,0,len(a)-1)print 倒序排序后数组:,aprint ***********
您可能关注的文档
- LOL英雄联盟S3新旧装备全部改动最新最全面信息.docx
- LR出现SystemExceptionsEXCEPTIONACCESSVIOLATION的解决方法.doc
- l雷锋月演讲比赛策划书.doc
- Mac下配置Press环境的方法.docx
- Mac下编译OpenSSL静态库.doc
- makefile中的all和.PHONY的作用.doc
- ly雨霖铃Convertor.doc
- makefile学习经验-编译生成动态库文件(方式一).doc
- malloc和calloc区别.docx
- mariadb10源码安装.doc
- 《量子通信在金融领域实现量子密钥协商的安全协议优化》教学研究课题报告.docx
- 面向国际小学的AI教育平台语言支持与文化教育实践分析教学研究课题报告.docx
- 小学数学教学中学生数字身份构建与隐私保护实践研究教学研究课题报告.docx
- 高中英语教学计划数字化管理在提高学生口语表达能力的研究教学研究课题报告.docx
- 智慧教育云平台在线考试与测评系统实时反馈与个性化辅导机制研究教学研究课题报告.docx
- 工业维护与培训中增强现实技术的融合创新与效果研究教学研究课题报告.docx
- 2025年服务行业人员模拟题库附完整答案详解【精选题】.docx
- 高中英语学术词汇教学与口语表达能力培养研究教学研究课题报告.docx
- 2025年服务行业人员模拟题库附参考答案详解(能力提升).docx
- 2025年服务行业人员模拟题库附参考答案详解(考试直接用).docx
文档评论(0)