C语言数据排序专题复习[名师原创].docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C语言数据排序专题复习[名师原创]

C语言数据排序专题复习 排序是将一个无序的数据序列按照某种顺序重新排列。用数组存放要排序的数据序列。本专题介绍几种常用的排序方法,均假设数据从小到大排序。 1.冒泡排序(又称起泡法) 基本思路:每轮排序找余下的数据中的最小值定位在最前,故每经过一轮排序确定一个位置,余下的数据就减少一个。n个数排序要经过n-1轮排序。排序要用二重循环实现,外循环表示排序的轮次,内循环示每轮排序将最小值交换到最前面。(以10个数从小到大排序为例) 第1轮排序,下标i的值为0,找a[0]---a[9],10个数中找最小值,将最小值交换到a[0]位置,最小值初值为a[0],要将a[1]---a[9]每个元素逐一与a[0]比较,如果比a[0]小,就与a[0]交换。 第2轮排序,下标i的值为1,找a[1]—a[9],9个数中找最小值,将最小值交换到a[1] 位置,最小值初值为a[1],要将a[2]---a[9]每个元素逐一与a[1]比较,如果比a[1]小,就与a[1]交换。 依次类推。 10个数排序,外循环变量i的取值从0----8(小于9)表示要经过9轮排序,注意观察 i=0,第1轮排序,内循环与最小值比较的元素是a[1]到a[9], i=1,第2轮排序,内循环与最小值比较的元素是a[2]到a[9], 内循环用j表示元素下标,终值固定为9,初值i=0时,j=1;i=1时,j=2;j=i+1 程序清单:main() { int i,j,a[10],t; /*t用于交换的变量*/ for(i=0;i10;i++) scanf(“%d”,a[i]); for(i=0;i9;i++) for(j=i+1;j10;j++) if(a[j]a[i]){t=a[i];a[i]=a[j];a[j]=t;} for(i=0;i10;i++) printf(“%4d”,a[i]); } 冒泡排序另外一种表达形式:前面程序是每轮排序找最小值定位在最前面,换一种思路,每一轮排序找最大值定位在最后面。每轮排序将相邻的元素两两比较,如果前面元素较大,则交换到后面。 程序清单:main() {int i,j,a[10],t; for(i=0;i10;i++) scanf(“%d”,a[i]); for(i=0;i9;i++) for(j=0;j9-i;j++) if(a[j]a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;} for(i=0;i10;i++) printf(“%4d”,a[i]); } 二.选择排序(冒泡排序的改进) 在冒泡排序的基础上增加了一个变量,表示每轮排序的最小值的下标。如果每轮排序找出最小值的下标与初始值不一致时,则应交换该两个下标对应的元素,选择排序每轮排序最多交换了一次数据,大大减少了数据交换的次数。 程序清单:main() { int i,j,k,t; for(i=0;i10;i++) scanf(“%d”,a[i]); for(i=0;i9;i++) { k=i; for(j=i+1;j10;j++) if(a[j]a[k])k=j; if(k!=i){t=a[i];a[i]=a[k];a[k]=t;} } for(i=0;i10;i++) printf(“%4d”,a[i]); } 三.插入排序 排序的基本思路:将数组元素分为两个区域,有序区a[0]----a[i-1],无序区a[i]-----a[9],每轮排序是将无序区的第一个元素插入到有序区中,首先将无序区的第一个元素与有序区的最后一个元素比较,如果小,继续与有序区的倒数第二个元素比,依次类推,直到比有序区的某个元素大时就找到了插入位置,既插到该元素后。每经过一轮排序有序区增加一个元素,第一轮排序前,有序区元素个数为1,既只有a[0]. 程序清单: main() { int i,j,t,a[10]; for(i=0;i10;i++) scanf(“%d”,a[i]); for(i=1;i10;i++) if(a[i]a[i-1]) { t=a[i];j=i-1; do { a[j+1]=a[j]; /*有序区的元素向后移*/ j--; /*j下标自减,

文档评论(0)

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

教师资格证持证人

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

领域认证该用户于2024年04月12日上传了教师资格证

1亿VIP精品文档

相关文档