二分搜索算法与快速排序算法及分治策略.docVIP

二分搜索算法与快速排序算法及分治策略.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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);

文档评论(0)

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

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

1亿VIP精品文档

相关文档