- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
二分搜索算法与快速排序算法及分治策略
实验课程:算法分析与设计
实验名称:实验二 C/C++环境及递归算法 (综合性/设计性)
实验目标:
1、熟悉二分搜索算法和快速排序算法;
2、初步掌握分治算法;
实验任务:
掌握分治策略的概念和基本思想。
实验题:
设a[0:n-1]是一个已排好序的数组。请改写二分搜索算法,使得当搜索元素x不在数组中时,返回小于x的最大元素的位置i和大于x的最小元素位置j。当搜索元素在数组中时,I和j相同,均为x在数组中的位置。设有n个不同的整数排好序后存放于t[0:n-1]中,若存在一个下标i,0≤i<n,使得t[i]=i,设计一个有效的算法找到这个下标。要求算法在最坏的情况下的计算时间为O(logn)。
在快速排序中,记录的比较和交换是从两端向中间进行的,关键字较大的记录一次就能交换到后面单元,关键字较小的记录一次就能交换到前面单元,记录每次移动的距离较大,因而总的比较和移动次数较少。
实验设备及环境:
PC;C/C++的编程环境Visual C++。
实验主要步骤:
明确实验目标和具体任务;
理解实验所涉及的分治算法;
编写程序并实现分治算法;
设计实验数据并运行程序、记录运行的结果;
实验数据及运行结果、实验结果分析及结论:
1、#include iostream
using namespace std;
int main()
{
int const length=100;
int n,x;
int a[length];
cout依次输入数组的长度,数组内容,要查找的数endl;
cinn; //输入数组的长度
for(int i=0;in;i++)
cina[i];
cinx;
void BinarySearch(int a[],int n,int x);
BinarySearch(a, n, x);
return 0;
}
void BinarySearch(int a[],int n,int x) //n:数组长度,i,j分别表示下标
{
int i,j,mid=0,left=0;
int right=n-1;
while(leftright+1left=0)
{
int mid=(left+right)/2;
if(x==a[mid])
{
i=j=mid;
break;
}
if(xa[mid])
left=mid+1;
else
right=mid-1;
}
if ((i==j)(i=0))
cout所找的数据在数组中下标为:iendl;
else
{
i=right;
j=left;
cout所找的数据不在数组中,其前后下标为:i,jendl;
}
}
实验结果:
结果分析:数据为数组长度为5,数组内容为1,2,3,4,5和1,2,3,6,8,当要查询的是4时,显示的结果为在第3位和不存在的情况下前后下标为2,3,因而可知程序执行是正确的。
2、#include iostream
using namespace std;
#define num 1000
int a[num];
templateclass Type
void QuickSort(Type a[], int p, int r)
{
if (p r)
{
int q = Partition(a, p, r);
QuickSort(a, p, q - 1); // 对左半段排序
QuickSort(a, q + 1, r); // 对右半段排序
}
}
templateclass Type
int Partition(Type a[], int p, int r)
{
int i = p, j = r + 1;
Type x = a[p];
// 将x的元素交换到左边区域
// 将x的元素交换到右边区域
while (true)
{
while (a[++i] x);
while (a[--j] x);
if (i = j)
break;
swap(a[i], a[j]);
}
a[p] = a[j];
a[j] = x;
return j;
}
void main()
{
int n;
cout请输入数组大小:endl;
cinn;
cout请输入数组的内容并以空格隔开:endl;
for(int z=0;zn;z++)
cina[z];
cout从小到大排序后为:;
QuickSort(a, 0, n-1);
您可能关注的文档
最近下载
- 《客户服务与管理》教案 第5课 学会使用即时通信工具.pdf VIP
- 民爆信息系统网路服务平台.pptx VIP
- 《QCNPC41-2001-防喷器判废技术条件》.pdf VIP
- 《客户服务与管理》(李清文)718-1教案 第2课 熟悉客户服务人员的综合素质要求.docx VIP
- 《客户服务与管理》(李清文)718-1教案 第3课 学会使用电话服务工具.docx VIP
- 3《峨日朵雪峰之侧》同步练习(含答案)统编版高中语文必修上册.docx VIP
- 第2课 让美德照亮幸福人生.pptx VIP
- 《峨日朵雪峰之侧》同步练习 统编版高中语文必修上册.docx VIP
- 海马普力马PREEMA 1.8L、1.6升 电路图07-发动机和变速箱控制.pdf VIP
- 《客户服务与管理》教案 第1课 初识客户服务与管理.docx
文档评论(0)