《数据结构》第八章节 排序.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《数据结构》第八章节 排序

第8章 排 序 学习目的要求: void heapadjust(int r[],int s,int m { int rc,j; /*rc暂存记录的关键字*/ rc=r[s]; /*记录关键字送rc*/ for(j=2*s;j=m;j*=2) /*沿关键字较大的孩子结点向下搜索调整*/ { if((jm)(r[j]=r[j+1])) ++j; /*若右孩子大于左孩子,则j为右孩子的下标*/ if(rcr[j]) break; /*将r[j]调到父结点的位置*/ r[s]=r[j]; s=j; } r[s]=rc; /*将rc插入到最终位置*/ } 8.3 选择排序 main() { int r[LENGTH]={0,42,36,56,78,67,11,27,36}; int i,x; for(i=(LENGTH-1)/2;i0;--i) /*将待排序序列调整为大顶堆*/ heapadjust(r,i,LENGTH); /*调用建堆算法函数*/ for(i=LENGTH-1;i1;--i) /*排序(重复进行记录交换和堆调整)*/ { x=r[1]; /*将堆顶记录与当前未经排序子序列r[1..i]中*/ r[1]=r[i]; /*最后一个记录相互交换*/ r[i]=x; heapadjust(r,1,i-1); /*调用建堆算法将r[1..i-1] 调整为大顶堆*/ } for(i=1;iLENGTH;i++) /*输出排序后的记录序列*/ printf(%d ,r[i]); printf(\n); } 8.3 选择排序 堆排序对n较大的文件很有效,对记录数较少的文件不值得提倡。整个堆排序的时间复杂度为O(nlog2n),堆排序仅需一个记录大小供交换用的辅助存储空间。对于存在相同关键字的记录的情况,堆排序是不稳定的。 8.3 选择排序 8.4 交换排序 交换排序的基本思想是:两两比较待排序记录的关键字,若发现两个记录的次序为逆序时,交换其存储位置,直到没有逆序的记录为止。常用的交换排序方法有:冒泡排序和快速排序。 8.4.1 冒泡排序 冒泡排序是一种简单的排序方法。它的基本思想是对所有相邻记录的关键字值进行比较,如果是逆序(r[i]r[i+1]),则交换其位置,经过多趟排序,最终使整个序列有序。 8.4 交换排序 其处理过程为: 第一趟排序,从第一条记录r[1]开始,直到最后一条记录r[n], 对两两相邻的记录依此比较,若发现为逆序,则立即交换其位置,最后使这n条记录中关键字最大的记录“下沉”到最底部,既被交换到第n个位置上,它不参与下一趟排序; 第二趟排序,从第一条记录r[1]开始,直到第n-1条记录r[n-1], 对两两相邻的记录依此比较,若发现为逆序,则立即交换其位置,最后使这n-1条记录中关键字最大的记录“下沉”到次底部,既被交换到第n-1个位置上,它不参与下一趟排序;如此反复,最多经过(n-1)趟冒泡排序,就可以使整个序列成为有序序列。 例如,一组待排序的记录的关键字如下,要求按照关键字由小到大进行排序。 42 36 56 78 67 11 27 36 8.4 交换排序 78 67 56 42 36 36 11 i=7 78 67 56 42 36 27 27 11 i=6 78 67 56 42 36 36 27 11 i=5 78 67 56 36 36 27 11 36 i=4 78 67 36 42 27 11 42 36 i=3 78 36 56 27 11 56 42 36 i=2 36 67 27 11 67 56 42 36 i=1 36 78 27 11 67 78 56 36 42 初始状态 冒泡排序的时间复杂度为O(n2),由于它的记录移动次数较多,故平均时间性能比直接插入排序要差得多。 冒泡排序只需要一个记录的辅助空间,用来作为记录交换的中间暂存单元。 冒泡排序是一种稳定的排序方法。 8.4 交换排序 8.4.2 快速排序 快速排序(Quick Sort)是对冒泡排序的一种改进。

文档评论(0)

ctuorn0371 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档