- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
清华大学 黄维通 设计制作 第9章 排序及查找算法设计及其实现 清华大学 黄维通 设计制作 * 第9章 排序及查找算法及其实现 本章主要内容 排序概述 冒泡排序法的设计及其实现 选择排序法的设计及其实现 插入排序法的设计及其实现 SHELL排序法的设计及其实现 字符串数组的排序设计及其实现 查找概述 顺序查找及其应用 折半查找及其应用 在工程领域的计算机程序设计中,使用最广泛的,也是研究最充分的课题就是排序和查找算法了。有关排序和查找的算法遍布在千千万万的程序中,无论是数据库程序,还是各种编译程序、各种游戏,无一不用到排序和查找算法的 9.1 排序概述 所谓排序,就是将一个数据元素(或记录)的任意序列,按照指定的关键字,重新排成一个有序的序列 一般来说,排序处理时要指定排序所基于的关键字,排序算法就是根据关键字来比较的。当排序过程中需要交换的时候,则是对含有关键字的整条信息进行交换。 9.1.1排序的概念 假设含n个记录的序列为: 其相应的关键字序列为 排序的目的是为了确定一个新的序列 对应的关键字满足如下的非递减(或非递增)关系 9.1.2序的定义 交换法 9.1.3 排序的方法 每次只看相邻的两张牌,若不符合顺序则交换,多次交换直到符合要求 先把牌都抓到手里,先选最大/小的一张放到一边,然后在剩下的里面选最大/小的,依此类推,直到最后 抓牌过程每摸到一张,将它插入合适的位置,直到最后 选择法 插入法 以扑克排序为例 9.1.4排序效率 9.2 冒泡排序法的设计及其实现 冒泡排序(Bubble Sort)算法是最简单、最常见的也是效率最差的算法,适用于 小数据 量的排 序。 9.2.1 冒泡算法设计思想 【例】有一组序列,顺序为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); } 9.2.2冒泡算法的实现 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 main() //主函数 { int *a,n=5,i; a=(int *)malloc(n*sizeof(int)); //为5个待排序整型数开辟存储空间 for(i=0; in; i++) scanf(%d,a[i]); //输入待排序数据 BubbleSort(a,n); //调用排序函数 free(a); //排序结束,释放存储空间 } initial sorting: 5 4 3 2 1 after 1 sorting: 4 3 2 1 5 after 2 sorting: 3 2 1 4 5 after 3 sorting: 2 1 3 4 5 after 4 sorting: 1 2 3 4 5 9.3 选择排序法的设计及其实现 选择排序法的过程很简单。首次扫描的时候选择出最小的一个元素,将它和第一个位置(也称为当前的基准元素位置)的元素交换。然后从剩下的n-1个元素中选择次小的元素,再和第二个位置(变成当前新的基准元素位置了)的元素交换。不断重复
您可能关注的文档
最近下载
- 《天上有颗南仁东星》第二课时 课件 八年级语文上册 统编版.pptx VIP
- 新人教版高中物理必修三第十一章《电路及其应用》测试题(含答案解析).docx VIP
- 14、圆明园的毁灭(课件)第二课时2023-2024学年五年级上册语文(统编版) (1).pptx VIP
- 北师大版四年级数学上册第三单元《乘法》(大单元教学设计).docx VIP
- 同上一堂党课初中篇 中流砥柱观后感五.doc VIP
- 最新2016-2017学年秋季学期人美版小学六年级上册美术教案全册.doc VIP
- 《互联网》精品课件.pptx VIP
- 浙江维思通新材料有限公司年产 20000 吨锂电池新型材料项目环评报告.docx VIP
- BIM基础培训教材课件.pptx VIP
- 管理学:激励PPT教学课件.pptx
文档评论(0)