python实现快速排序几种方法.docxVIP

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
python实现快速排序的几种方法 快速排序算法说明: 设要 HYPERLINK /view/58783.htm \t _blank 排序的 HYPERLINK /view/209670.htm \t _blank 数组是A[0]……A[N-1],首先任意选取一个数据(通常选用中间的数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速 HYPERLINK /view/58783.htm \t _blank 排序。值得注意的是,快速 HYPERLINK /view/58783.htm \t _blank 排序不是一种稳定的 HYPERLINK /view/297739.htm \t _blank 排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。 一趟快速 HYPERLINK /view/58783.htm \t _blank 排序的算法是: 1)设置两个 HYPERLINK /view/296689.htm \t _blank 变量i、j, HYPERLINK /view/58783.htm \t _blank 排序开始的时候:i=0,j=N-1; 2)以第一个 HYPERLINK /view/209670.htm \t _blank 数组元素作为关键数据,赋值给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-完成的时候,此时令循环结束)。 (注:以上说明摘自百度百科) 方法一:经典快速排序算法 下面的代码中是经典快速排序算法,并且范围正序和倒序两种排列方式: #正序排列函数 def qiucksortasc(arr,begin,end): #设定取出开始的第一个值用于判断 key=arr[begin] #从左边开始找大于key值的元素下标 pl=begin #从右边开始找小于key值的元素下标 pr=end while 1: #找到从右边开始第一个小于key的元素,如果大于key,pr-1继续寻找 while arr[pr]key: pr=pr-1 #找到从左边开始第一个大于key的元素,如果小于key,pl+1继续寻找 while arr[pl]key: pl=pl+1 #交换arr[pr]和arr[pl]的值 arr[pl],arr[pr]=arr[pr],arr[pl] print pl is %d and pr is %d %(pl,pr), and ,arr #当pr和pl相等的时候跳出循环 if pl==pr: print 完成一趟快排 break; #递归开始 #对key左边的元素开始排序 if(pl+1end): qiucksortasc(arr,pl+1,end) #对key右边的元素开始排序 if(pr-1begin): qiucksortasc(arr,begin,pr-1) #倒序排列函数 def qiucksortdesc(arr,begin,end): #设定取出开始的第一个值用于判断 key=arr[begin] #从左边开始找大于key值的元素下标 pl=begin #从右边开始找小于key值的元素下标 pr=end while 1: #找到从右边开始第一个大于key的元素,如果小于key,pr-1继续寻找 while arr[pr]key: pr=pr-1 #找到从左边开始第一个小于key的元素,如果大于key,pl+1继续寻找 while arr[pl]k

文档评论(0)

185****7617 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档