- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
线性时间选择问题实验报告-《计算机算法设计与分析》学科
《计算机算法设计与分析》实 验 报 告
实验名称:线性时间选择问题
实验地点:
所使用的开发工具及环境:
实验目的:
熟悉掌握分治算法设计技术
二、实验内容:
1、按教材所授内容要求,完成“线性时间选择问题”算法。得到一个完整正确的程序。
2、问题规模:不少于2000
3、输出最终结果。
基本思想、原理和算法描述:
基本思想:将n个输入元素划分成┌ n/5┐个组,每组有5个元素,除最后一组可能不是5个元素之外用任意一种算法,将每组的元素排好序,并取出每组的中位数,共┌ n/5┐个。调用Select找出这┌ n/5┐个元素的中位数,如果┌ n/5┐是偶数就找两个中位数中较大的一个。在这里我用的排序的方法是快速排序。
算法描述:
template class Type
Type Select(Type a[],int p,int r,int k)
{ int i;
if(r-p75)
{
Qsort(a,p,r);
return a[p+k-1];
}
//(r-p-4)/5相当于n-5
for(i=0; i=(r-p-4)/5; i++)
{
//将元素每5个分成一组,分别排序,并将该组中位数与a[p+i]交换位置
//使所有中位数都排列在数组最左侧,以便进一步查找中位数的中位数
Qsort(a,p+5*i,p+5*i+4);
Swap(a[p+5*i+2],a[p+i]);
}
//找中位数的中位数
Type x = Select(a,p,p+(r-p-4)/5,(r-p-4)/10);
i = Partition(a,p,r,x);
int j = i-p+1;
if(k=j)
{
return Select(a,p,i,k);
}
else
{
return Select(a,i+1,r,k-j);
}
}
源程序清单:
#includestdio.h
#includestdlib.h
#includetime.h
#includewindows.h
#includeiostream.h
template class Type
void Swap(Type x,Type y);
inline int Random(int x, int y);
template class Type
void Qsort(Type a[] ,int p,int r);
template class Type
int Partition(Type a[],int p,int r,Type x);
template class Type
Type Select(Type a[],int p,int r,int k);
void main()
{
int a[2000];
srand((unsigned)time(NULL));
for(int i=0; i2000; i++)
{
a[i] = Random(0,2000);
couta[i]:a[i] ;
}
coutendl;
cout第800小元素是Select(a,0,1999,800)endl;
//重新排序,对比结果
Qsort(a,0,1999);
for( i=0; i2000; i++)
{
couta[i]:a[i] ;
}
coutendl;
}
template class Type
void Swap(Type x,Type y)
{
Type temp = x;
x = y;
y = temp;
}
inline int Random(int x, int y)
{
int ran_num = rand() % (y - x) + x;
return ran_num;
}
template class Type
void Qsort(Type a[] ,int p,int r)
{
if(pr)
{
Type x;
int q=Partition(a,p,r,x);
Qsort(a,p,q-1);
Qsort(a,q+1,r);
}
}
template class Type
int Partition(Type a[],int p,int r,Type x)
{
int i = p;
int j = r + 1;
x=a[p];
while(true)
{
while(a[++i]xir);
while(a[--j]x);
if(i=j) break;
Swap(a[i],a[j]);
}
a[p]=a[j];
a[j]=x;
return j;
}
t
您可能关注的文档
最近下载
- 湖南省名校联考联合体2025-2026学年高一上学期10月联考语文试卷含答案.pdf VIP
- 部分常用岩土物理力学参数经验数值.doc
- 中南大学网校马克思主义基本原理考试.doc VIP
- 浙江省精诚联盟2025-2026学年高一上学期10月联考生物试卷含答案.docx VIP
- 2025-2026学年广东省广州市第一中学高一上学期10月月考数学试卷含详解.docx VIP
- 抖音爸爸博主“新父职”的数字实践研究_.pdf VIP
- 演示文稿青春期生长发育.ppt VIP
- 2023年中南财经政法大学公共课《马克思主义基本原理概论》期末试卷B(有答案).docx VIP
- 2024-2025学年广东省珠海市文园中学九年级(下)开学物理试卷.docx VIP
- 保健品营销策划.pdf VIP
- 软件下载与安装、电脑疑难问题解决、office软件处理 + 关注
-
实名认证服务提供商
专注于电脑软件的下载与安装,各种疑难问题的解决,office办公软件的咨询,文档格式转换,音视频下载等等,欢迎各位咨询!
文档评论(0)