09排序.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
09排序

实施冒泡排序时,要对n个记录的关键字序列进行n?1次扫描。每次扫描时,都从下到上对相邻的两个关键字进行比较,如果不符合由小到大的顺序,就将它们交换位置。 9.3.1 冒泡排序 这样,经过第1次扫描,就能从n?1对相邻关键字的比较中,把关键字序列里最大的元素渐渐地移动到序列的最上边;经过第2次扫描,就能从n?2对相邻关键字的比较中,把关键字序列里次大的元素渐渐地排到序列的次上位置;如此最多经过n?1次扫描,n个关键字都排到了自己应该位于的位置。 例9-5 有待排的记录关键字序列:84、30、73、、26、51,把它们存放在一个一维数组A里,然后对它们进行冒泡排序,最后给出排序结果。 图9-9 冒泡排序过程示例 算法9-4 冒泡排序算法。 已知有n个记录的无序序列,存放在一个一维数组Ar里。对它进行冒泡排序,并最后得到排序结果。算法名为Bub_Sort(),参数为Ar、n。 冒泡排序是一种稳定排序算法。 Bub_Sort(Ar, n) { for (i=1; in; i++) /* 对无序记录序列进行n?1趟扫描 */ { flag = 0; /* 这一趟是否发生交换的标志 */ for (j=1; j=n-i; j++) /* 这趟扫描的范围是从1到n?i */ if (Ar[j].keyAr[j+1].key) /* 通过temp进行交换 */ { temp = Ar[j+1].key; Ar[j] .key = Ar[j+1] .key; Ar[j+1] .key = temp; flag = 1; } if (flag == 0) /* 若没有发生交换,就结束算法 */ break; } } 例9-6 有待排记录的关键字序列:77、44、99、66、33、55、88、22,把它们存放在一个一维数组A里,然后对它们进行冒泡排序,最后给出排序结果。 快速排序的基本思想是:在待排序的n个关键字序列里,选择一个基准元素x,称其为“枢轴(Pivot)”。通常,把序列的第1个元素选为枢轴,也可以把位于序列中间位置的元素选为枢轴。然后把所有小于等于x的关键字调整到x的左边,把大于x的关键字调整到x的右边。这被称为是快速排序的一次划分。 9.3.2 快速排序 继续对左、右两个部分重复进行相同的这种划分过程,每次划分后就会让作为枢轴的关键字位于它最终应该在的位置上,直到最后分割的每一部分都只有一个关键字时,才结束整个排序过程。 图9-11 快速排序的一次划分示意 算法9-5 快速排序一次划分算法。 已知待排序的关键字序列存放在一维数组Ar里。现在要排序的子序列起始于第s个元素,终止于第t个元素。要对Ar[s]~Ar[t]里的关键字序列做快速排序的一次划分。算法名为Qukpass_Sort(),参数为Ar、s、t。 Qukpass_Sort(Ar, s, t) { low = s; /* ?low为划分时序列的左边界 */ high = t; /* ?high为划分时序列的右边界 */ temp = Ar[s]; /* 把枢轴值暂存于temp */ while (lowhigh) { while ( (highlow) (temp.keyAr[high].key)) /* 把大于枢轴的关键字留在右边的子序列里 */ high--; if (lowhigh) /* 把小于等于枢轴的关键字移到左边 */ { Ar[low] = Ar[high]; low++; } while ((lowhigh) (Ar[low].key=temp.key)) /* 把小于枢轴的关键字留在左边的子序列里 */ low++; if (lowhigh) /* 把大于枢轴的关键字移到右边 */ { Ar[high] = Ar[low]; high--; } } Ar[low]=temp; /* 把枢轴值存入正确位置 */ } 例9-7 有关键字序列:70、85、69、35、93、23、71、68、55,存放在一个一维数组A中。试应用快速排序一次划分算法,完成对它们的

文档评论(0)

f8r9t5c + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:8000054077000003

1亿VIP精品文档

相关文档