清华大学(八)幻灯片.pptVIP

  1. 1、本文档共43页,可阅读全部内容。
  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文档。上传文档
查看更多
第9章 排序及查找算法及其实现 ;本章主要内容;交换法;9.1.4排序效率 ;9.2 冒泡排序法的设计及其实现 ;冒泡排序(Bubble Sort)算法是最简单、最常见的也是效率最差的算法,适用于 小数据 量的排 序。;【例】有一组序列,顺序为5、4、3、2、1,用冒泡算法,对此序列按从小到大顺序排列 #include stdio.h #include stdlib.h void PrintArray(int * a, int n) //输出排序每一步结果的函数 { int i; for(i=0; in; i++)//输出元素 printf(%4d,a[i]); printf(\n); };void BubbleSort(int a[], int n)//排序函数 { int i,j,tmp; //tmp存储交换数据 int flag; //标志变量,如果为0, //说明不再交换顺序,排序结束 int count = 0; //计录交换次数 printf(initial sorting:); PrintArray(a,n); //输出排序前的序列 for(i=0; in-1; i++) //开始排序 { flag = 0; //标志初值为0;for(j=0; jn-i-1; j++) { if(a[j] a[j+1]) { tmp = a[j]; a[j] = a[j+1]; a[j+1] = tmp; flag = 1; //若发生交换,flag变为1 }} count++; //记录已经发生的排序次数 printf(after %d sorting:,count); PrintArray(a,n); //第count次的排序结果 if(flag == 0) //每排序一次,flag都清0 //若交换不再发生,则排序完成 return; }};【例】选择排序法;void SelectSort(int a[], int n) //选择排序法的函数实现 { int i,j,tmp; // tmp为中间变量 int min; //保存序列中的最小值 int count=0; //记录交换次数 printf(initial sorting:); PrintArray(a,n); //输出当前结果 ? for(i=0;in-1;i++) //开始排序 { min=i; //基准元素的下标 //其他元素与该下标下的元素比较;for(j=i;jn;j++) { if(a[j]a[min]) //若小于基准元素,则交换 min=j; //把要交换的位置告诉min } if(min!=i) //若min的值非原来的i ,则要交换 { tmp=a[i];//与基准元素进行位置交换 a[i]=a[min]; a[min]=tmp; } count++; printf(after %d sorting:,count); PrintArray(a,n); } };9.4 插入排序法的设计及其实现 ; 插入排序法的思想是:当插入第i个元素的时候,前面i-1个元素已经排好了,这时只需要用第i个的关键码从最后开始与其他的进行比较,找到合适的位置,将后面的对象依次后移,然后将新的对象插入。 ;【例】用插入排序法实现排序 void InsertSort(int a[],int n) {int i,j,tmp; for (i=1;in;i++) {tmp=a[i]; for(j=i-1;(j=0) (tmpa[j]);j--) a[j+1]=a[j]; //其余元素后移 a[j+1]=tmp;//a[i]就插在这个位置 printf(after %d sorting:,i); PrintArray(a,i+1); //输出当前结果 }};前面介绍的几种排序算法都有一个共同的缺点,当序列中元素比较多的时候,排序时间会非常长,甚至长得不可忍受 ;9.5 SHELL排序法的设计及其实现 ;9.5.1 SHELL排序法设计思想 ;【例】对既有序列{8,7,6,5,4,3,2,1},用SHELL排序法从小到大排序 void shell(int count,int a[]) //SHELL算法排序函数模块 {int i,j,gap=count,k,x; for(k=0;kcount;k++)//控制循环次数 { gap=gap/2;;for(i=gap;icount;++i)//进行排序 {x=a[i]; for(j=i-gap;(xa[j])(j=0);

文档评论(0)

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

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

1亿VIP精品文档

相关文档