- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
c语言程序设与项目实践第18章
第18章 C语言常用算法 本章的学习重点 ◆ 了解起泡排序、选择排序及合并排序算法 ◆ 掌握快速排序算法 ◆ 掌握折半查找算法 ◆ 了解二叉树的概念及其简单操作 18.1 什么是算法 算法的程序公式: 程序 = 数据结构 + 算法 1.计算机算法 计算机算法主要有两类:数值运算算法和非数值运算算法。 2.算法的程序实现 使用程序实现算法,应做到程序简洁明了,易读性强,执行效率高。 例如,要实现下面的公式的加和运算: 1+3+5+7+……+99+100 对于这样的累加计算,可以使用下面的C语言程序实现: 01 int loop = 0, sum = 0; 02 for(loop=1;loop100;loop=loop+2) 03 { 04 sum = sum + loop; 05 } 06 sum = sum + 100; 18.1 什么是算法 如果利用数学算法,可以使程序效率提高近10倍。数学运算中,可以使用和差算法计算这样的加和运算,公式为: sum = n*(a1+an)/2 使用C语言实现的程序为: 01 int sum = 0; 02 sum = 49 * (99 + 1) / 2.0; 03 sum = sum +100; 3.非数值算法 C语言中最常用的非数值算法主要包括排序算法和查找算法。在这些算法的理论设计中,有时需要用到某些数学模型,通常称为数据结构。典型的数据结构类型主要有链表、二叉树、图等。 18.2 排序算法 排序,是指将一系列数据按照某种规则按照一定的顺序进行排列,以符合实际处理需求的操作过程。 例如,对于一组数据,可以按照由大到小的顺序排序,也可以按照由小到大的顺序排序。对于人员姓名,可以按照首字母前后顺序排序,也可以按照姓名长度排序等等。一个合理的排序算法可以使程序执行效率提高,程序健壮性增强。 18.2.1 起泡排序 起泡排序也叫冒泡排序,它的一般实现规则为:首先制定排序规则,然后,依次两两比较待排序的数据,若不符合排序规则,则进行交换,然后依次比较下去,直到全部元素排列有序为止。 例如,有如下一组数据{85,279,948,521,616,888},按照从大到小的顺序排列,使用起泡法排序,首先执行第一趟交换,过程如图所示。 18.2.1 起泡排序 在第一趟数据比较的基础上,继续进行第二趟数据比较。第二趟数据比较共执行4次比较与交换,执行完毕后数据顺序为{948,521,616,888,279,85},次小值279将被放到倒数第二的位置,如图所示。 18.2.1 起泡排序 经过五趟数据比较与交换后,数据顺序变为由大到小的有序序列。从而实现了使用起泡法排序的目的。其一般表达函数为: 01 void BubbleSort(dataList r[], int n) 02 { 03 int loop1, loop2, temp; 04 for(loop1=1;loop1=n-1;loop1++) //外层循环,控制循环比较趟数 05 { 06 for(loop2=n;loop2=loop1+1;loop2--) //内层循环,控制比较位置 07 { 08 if(r[loop2] r[loop2-1]) //判断是否符合交换规则 09 { 10 temp=r[loop2]; 11 r[loop2]=r[loop2-1]; 12 r[loop2-1]=temp; 13 } 14 } 15 } 16 } 18.2.1 起泡排序 范例18.1 BubbleSortContryTimes.c 设计一段起泡排序算法的排序程序,将下面几个国家到2010年为止打入世界杯决赛圈的次数,按从大到小排列,相同次数的随机排列。国家及进入世界杯决赛圈次数:法国(13),西班牙(13),荷兰(9),美国(9),德国(13),巴西(19),英格兰(13),阿根廷(15),中国(1),澳大利亚(3),希腊(2),意大利(17),喀麦隆(6)。 18.2.2 选择排序 选择排序的基本思想是:首先制定排序规则(例如按照从小到大排序原则),排序过程中首先在未排序序列中找到最小值,放在排序序列的起始位置,随后,逐趟从余下未排序的数值中逐次寻找最小值,直到整个序列有序为止。 例如,有如下随机序列{6,18,45,3,77,-88},将该序列从小到大排序,使用选择排序算法过程如下: 首先,进行第一趟排序,找出其中最小的数,如图所示。 18.2.2 选择排序 经过第
文档评论(0)