(zhn)现在的位置Q?/strong> 跨考网频道考研报名正文

数据l构W五章算法设计题[13]_跨考网

最后更新时_2011-11-22 13:44:35
辅导评Q?a target="_blank" rel="nofollow">暑期集训 在线咨询
复习紧张Q焦头烂额?逆风轻袭Q来跨考秋季集训营Q帮你寻Ҏ(gu)Q定Ҏ(gu)Q?/span> 了解一?>

1. 数组 H[ 1Q?/span>1000] 中存攄1000个大不同的正整?/span>;

  Q?/span>1Q?/span> 选择一分类法使能最快地得到其中10个最大的敎ͼ要说明理由;

  Q?/span>2Q?/span> ~写一E序seek() Q执行该E序Ӟ在命令行中提供二个参敎ͼ

  seek a n<enter> 表示需打印H[ ]?/span>n个最大数?/span>

  seek I n<enter> 表示需打印H[ ]?/span>n个最数?/span> ?a target="_blank">江大学 1994 ?/span> (18?/span>)?/span>

  【参考答案?/span>

  Q?/span>1Q在n个正整数中,选出k(k<<mQ个最大的敎ͼ应用堆排序Ҏ(gu)。对深度?/span>h的堆Q筛选算法中关键字的比较ơ数臛_?/span>2Q?/span>h-1Q次。徏堆dq行的关键字比较ơ数不超q?/span>4nQ堆排序在最坏情况下的时间复杂度?/span>O(nlognQ?/span>

  int r[1000]; // r[1000]是整型数l?/span>

  Q?/span>2Q?/span>void sift(int r[],int k,m,tag)

  //已知r[k+1..m]是堆Q本法?/span>r[k..m]调整成堆Q?/span>tag=1建立大根?/span>,tag=2建立根?/span>

  {i=k;j=2*i;x=r[k];

  while (j<=m)

  {if (tag==2) //建立根?/span>

  {if (j<m && r[j]>r[j+1]) j++;//沿关键字的方向{?/span>

  if(r[j]<x)) {r[i]=r[j];i=j;j=2*i;}

  else break;}

  else //建立大根?/span>

  {if (j<m && r[j]<r[j+1]) j++;//沿关键字的方向{?/span>

  if(r[j]>x) {r[i]=r[j];i=j;j=2*i;}

  else break;}

  }

  r[i]=x;

}//sift

main(int argc,char *argv[])

  //Ҏ(gu)命o行中的输入,?/span>1000个数中选取n个最大数?/span>n个最数

  {int m=1000,i,j;

  n=augv[2]; //从命令行输入的第二个参数是需要输出的数的个数

  if(n>m){printf(“参数错?/span>\n?/span>);exit(0);}

  for(i=0;i<m;i++) scanf(?/span>%d?/span>,&r[i]); //输入1000个大不同的正整?/span>

  if (augv[1]==?/span>a?/span>) //输出n个最大数Q要求徏立大根堆

  {for(i=m/2;i>0;i--) sift(r,i,m,1)

  printf(?/span>%d个最大数依次?/span>\n?/span>,n);

  for(i=m;i>m-n+1;i--) //输出n个最大数

  {printf(?/span>%5d?/span>,r[i]); j++; if((j+1)%5==0) printf(?/span>\n?/span>);//一行打?/span>5个数

  sift(r,1,i-1,1); } //调堆

  }

  else //(augv[1]==?/span>i?/span>) //输出n个最数Q要求徏立小根堆

  {for(i=m/2;i>0;i--) sift(r,i,m,2)

  printf(?/span>%d个最数依次?/span>\n?/span>,n);

  for(i=m;i>m-n+1;i--) //输出n个最数

  {printf(?/span>%5d?/span>,r[i]); j++; if((j+1)%5==0) printf(?/span>\n?/span>);//一行打?/span>5个数

  sift(r,1,i-1,2); } //调堆

  }

  }//main

  [法讨论]法讨论了徏堆,q输?/span>nQ?/span>n于{于mQ个最?/span>(?/span>)数的情况Q由于要求输?/span>n个最大数或最数Q必d立极大化堆和极小化堆。注意输出时?/span>for循环控制到变?/span>i?/span>m变化?/span>m-n+1Q这是堆的性质军_的,只有堆顶元素才是最?/span>(?/span>)的。要避免?/span>i?/span>1?/span>n来输?/span>n个最?/span>(?/span>)数的错误?/span>

跨考考研评

班型 定向班型 开班时?/td> 高定?/td> 标准?/td> 评介绍 咨询
U季集训 冲刺?/td> 9.10-12.20 168000 24800?/td> 班面授+专业??+专业译֮向辅?协议加强评(高定?+专属规划{疑(高定?+_化答?复试资源(高定?+复试译֌(高定?+复试指导(高定?+复试班主?v1服务(高定?+复试面授密训(高定?+复试1v1(高定?
2023集训畅学 非定向(政英?数政qQ?/td> 每月20?/td> 22800?协议? 13800?/td> 先行阶在U课E?基础阶在U课E?强化阶在U课E?真题阶在U课E?冲刺阶在U课E?专业NҎ(gu)一对一评+班主dE督学服?全程规划体系+全程试体系+全程_化答?择校择专业能力定位体p?全年关键环节指导体系+初试加强?初试专属服务+复试全科标准班服?/td>

①凡本网注明“稿件来源:跨考网”的所有文字、图片和韌频稿Ӟ版权均属北京学博教育咨询有限公司Q含本网和跨考网Q所有,M媒体、网站或个h未经本网协议授权不得转蝲、链接、{帖或以其他Q何方式复制、发表。已l本|协议授权的媒体、网站,在下载用时必须注明“稿件来源,跨考网”,q者本|将依法q究法律责Q?/p>

②本|未注明“稿件来源:跨考网”的?囄Eg均ؓ转蝲E,本网转蝲仅基于传递更多信息之目的Qƈ不意味着再通{载稿的观Ҏ(gu)证实其内容的真实性。如其他媒体、网站或个h从本|下载用,必须保留本网注明的“稿件来源”,q自负版权等法律责Q。如擅自改为“稿件来源:跨考网”,本网依法追I法律责仅R?/p>

③如本网转蝲E涉及版权等问题Q请作者见E后在两周内速来?sh)与跨考网联系Q电(sh)话:400-883-2220