c数据结构chapt10.ppt

  1. 1、本文档共92页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第十章 内部排序 开始时 gap 的值较大,子序列中的对象较少,排序速度较快;随着排序进展,gap 值逐渐变小,子序列中对象个数逐渐变多,由于前面工作的基础,大多数对象已基本有序,所以排序速度仍然很快。 交换排序 ( Exchange Sort ) 10.4 选择排序 二. 堆排序 ⒈ 堆的定义: 称为堆。 满足条件(1)是按由小到大排序 (2)是按由大到小排序 若有n个元素的排序码k1,k2,k3,…,kn,当满足如下条件: ki≤k2i ki≥k2i (1) ki≤k2i+1 或 (2) ki≥k2i+1 其中i=1,2,…,?n/2? ?则称此n个元素的排序码k1,k2,k3,…,kn为一个堆。 10.4 选择排序 若将堆视为一个完全二叉树(图一),则堆的含义为:完全二叉树中所有非终端结点的值均不大于(或不小于)其左、右孩子的值(图二)。堆顶元素(即完全二叉树的根)是序列中最小(或最大)的元素。 k3 k1 k5 k2 k4    ........ 图一 24 12 47 38 85 91 30 53 图二 10.4 选择排序 ⒉ 堆排序基本思想 ⑴ 以初始关键字序列,建立堆; ⑵ 输出堆顶最小元素; ⑶ 调整余下的元素,使其成为一个新堆; ⑷ 重复⑵,⑶ n 次,得到 一个有序序列。 关键要解决⑴和⑶,即如何由一个无序序列建成一个堆? 如何调整余下的元素成为一个新堆? 21 25 49 25* 16 08 0 1 2 3 4 5 21 25* i = 1 49 25 16 25 16 08 49 flag=1 08 25* 49 21 flag=1 i = 2 i = 3 08 16 flag=1 25* 25 21 25* 0 1 2 3 4 5 i = 4 49 16 flag=0 08 25 21 void BubbleSort(RecType R[],int n) { int i,j; RecType temp; for (i=0;in-1;i++) { for (j=n-1;ji;j--) /*比较找本趟最小关键字的记录*/ if (R[j].keyR[j-1].key) { temp=R[j]; /*R[j]与R[j-1]进行交换*/ R[j]=R[j-1]; R[j-1]=temp; } } } 例11.3 设待排序的表有10个记录,其关键字分别为{9,8,7,6,5,4,3,2,1,0}。说明采用冒泡排序方法进行排序的过程。 void BubbleSort(RecType R[],int n) { int i,j,exchange;RecType temp; for (i=0;in-1;i++) { exchange=0; for (j=n-1;ji;j--) /*比较,找出最小关键字的记录*/ if (R[j].keyR[j-1].key) { temp=R[j]; R[j]=R[j-1];R[j-1]=temp; exchange=1; } if (exchange==0) return; /*中途结束算法*/ } } void BubbleSort(RecType R[],int n) { int i,j,exchange;RecType temp; for (i=0;in-1;i++) { exchange=0; for (j=n-1;ji;j--) /*比较,找出最小关键

文档评论(0)

2232文档 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档