c语言排序与查找..docVIP

  1. 1、本文档共6页,可阅读全部内容。
  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文档。上传文档
查看更多
排序与查找 1.选择排序 算法:N元数组a[0]~a[N-1]由小到大排序:第0步:找到a[0]~a[N-1]中的最小值元素与a[0]交换;第1步:找到a[1]~a[N-1]中的最小值元素与a[1]交换;第2步:找到a[2]~a[N-1]中的最小值元素与a[2]交换; …第i步:找到a[i]~a[N-1]中的最小值元素与a[i]交换;… 第N-2步:找到a[N-2]~a[N-1]中的最小值元素与a[N-2]交换。算法停止。 思考:由大到小排序算法如何改动? #include stdio.h#define N 10 void SelSort(int a[N]) { /*选择排序函数*/? ?int i,j,minj,t; ? ?for (i = 0;i N-1;i++) { ? ?? ?for (j = i + 1;j N;j++) ? ?? ? ? ?if(a[j] a[i]) { ? ?? ?? ?? ??t = a[i]; ? ?? ?? ????a[i] = a[minj]; ? ?? ?? ???a[minj] = t; ? ?? ?} ? ?} } 这样中间有些交换是没有必要的,设定一个minj变量记录当前一趟最小值的下标。可以减少变量交换的次数。改进如下:void SelSort(int a[N]) { /*改进选择排序函数*/? ?int i,j,minj,t; ? ?for (i = 0;i N-1;i++) { ? ?? ?minj = i; ? ?? ?for (j = i + 1;j N;j++) ? ?? ?if(a[j] a[minj]) ? ?? ?? ? minj = j; ? ?? ?if(minj != i) { ? ?? ?? ?t = a[i]; ? ?? ?? ?a[i] = a[minj]; ? ?? ?? ?a[minj] = t; ? ?? ?} ? ?} } void main(){ ? ?int a[N],i; ? ?for(i = 0;i N;i++) ? ?? ?scanf(%d,a + i); ? ?SelSort(a); ? ?for (i = 0;i N;i++) ? ?? ?printf(%6d,a[i]); } 2.插入排序 引例:写一个函数,将一个整型数x插入到由小到大排列的整型数组a[0]~a[N-1]中,使得插入元素后的数组a[0]~a[N]保持升序。 void insert(int a[N+1],int x) {? ?int i = N - 1; ? ?while (i = 0 a[i] x) { ? ?? ?a[i+1] = a[i]; ? ?? ?i--; ? ?} ? ?a[i+1] = x; } 算法要点:将升序数组中大于x的所有元素向后挪动一个下标位置;循环退出时,下标i+1位置为一空位置,正好是正确插入元素x的位置. 插入排序算法: N元数组a[0]~a[N-1]由小到大排序:第1步:将a[1]插入a[0]~a[1]中,使得a[0]~a[1]升序;第2步:将a[2]插入a[0]~a[2]中,使得a[0]~a[2]升序;第3步:将a[3]插入a[0]~a[3]中,使得a[0]~a[3]升序; …第i步:将a[i]插入a[0]~a[i]中,使得a[0]~a[i]升序;… 第N-1步:将a[N-1]插入a[0]~a[N-1]中,使得a[0]~a[N-1]升序;算法停止。 思考:由大到小排序算法如何改动? #include stdio.h#define N 10 void InsSort(int a[N]) { /*N元数组插入排序*/? ?int i,j,x; ? ?for(i = 1;i N;i++){ ? ?? ?x = a[i]; ? ?? ?j = i - 1; ? ?? ?while(j = 0 a[j] x) { ? ?? ?? ?a[j+1] = a[j]; ? ?? ?? ?j--; ? ?? ?} ? ?? ?a[j+1] = x; ? ?} } void main() { ? ?int a[N],i; ? ?for (i = 0;i N;i++) ? ?? ?scanf(%d,a[i]); ? ?InsSort(a); ? ?for (i = 0;i N;i++) ? ?? ?printf(%6d,a[i]); } 3.冒泡排序 相邻元素比较大小发生交换使最大值(最小值)浮出到数组尽头: (1)若a0a1,则a0?a1;(使a1为a0,a1的大者)(2)若a1a2,则a1?a2;(使a2为a1,a2的大者)… (i) 若ai-1ai,则ai-1?ai交换(使ai为a

文档评论(0)

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

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

1亿VIP精品文档

相关文档