选择问题算法.doc_第1页
选择问题算法.doc_第2页
选择问题算法.doc_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

选择问题算法 实验日志 实验题目:利用选择问题算法,写程序实现从一个未排序的一维整数数组中选取第k大的整数出来,k的取值在程序中设定。实验目的:1. 掌握选择问题算法思想;2. 熟练使用选择问题算法解决相应的问题。实验思想:对于给定的n 个元素的数组A (1 : n ),要求从中找出第k小的元素。如果划分元素v测定在A(j)的位置上,则有j-1个元素小于或等于A(j),且有n-j个元素大于或等于A(j)。因此,若kj,则第k小元素是A(j+1:n)中第(k-j)小元素。所导出的算法如果成SELECT。此过程把第k小元素放在A(k),并划分剩余的元素,使得A(i)A(k),1ik且A(i)A(k),kin。 算法13 找第k小元素procedure SELECT(A,n,k) /在数组A(1),A(n)中找第k小元素s并把它放在位置k,假设1kn。将剩下的元素按如下方式重新排列,使A(k)=t,对于1mt,有A(m)t;对于kmn,有A(m)t。A(n+1)=+/ integer n,k,m,r,j; m; rn+1; A(n+1)+; loop /每当进入这一循环时,1mkn+1/ jr /将剩余元素的最大下标加1后置给j/ call PARTITION(m,j) /返回j,它使得A(j)是第j小的值/ case :k=j:return :kj:rj /j是新的上界/ :else:mj+1 /j+1是新的下界/ endcase repeatend SELECT实验代码:#includeusing namespace std;/int n;int k;void sort(int array) / n 为数组元素个数 int i,j,temp; / i 为基准位置,j 为当前被扫描元素位置,k 用于暂存出现的较大的元素的位置 for(i=0;i10;i+) k=i; / k 初始化为基准位置 for(j=i+1;jarrayk) k=j ; / k 始终指示出现的较大的元素的位置 temp=arrayk;arrayk=arrayj;arrayj=temp; / 将此趟扫描得到的最大元素与基准互换位置 void main()int b;int array10;int m;coutInput your data:endl;for(b=0;barrayb;coutendl;coutyour input number are:endl;for(m=0;m=9;m+)coutarraym ;coutendl;sort(array);coutInput number k:k;cout第k大的数是:endl;couta

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论