算法设计与分析二分查找实验报告(2)

2020-02-22 10:59

在输入完一组数之后,按Ctrl+Z键结束输入,然后再用cin.clear()将输入恢复,再继续输入。

(三)、详细设计

#include #include #include using namespace std; #define N 10//初始空间大小 #define n 10//增加空间大小 template void sort(Type a[],int num){ double temp;

for(int i = 1;i <= num-1;i++){ for(int j = 0;j < num-i;j++){ if(a[j] > a[j+1]) {

temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; } } } }

template

int BinarySearch(Type *a,Type x,int m){ int left=0; int right=m-1; while(left<=right){

int middle = (left+right)/2; if(x==a[middle]) return middle; if(x>a[middle]) left=middle+1; else

right=middle-1; } return -1; }

int main(){

int *a,num,length,i = 0; a = (int *)malloc(sizeof(int)*N);

cout<<\请输入一组数(Ctrl+z停止输入)\ while(cin>>a[i]){ i++;

if(i>=N){

a = (int *)realloc(a,sizeof(int)*(length+n)); length += n; } } sort(a,i);

for(int j = 0;j cout<

cout<<\请输入要查找的数:\ cin>>num;

if(BinarySearch(a,num,i)!=-1){

cout<

cout<

double *b,num1; int length1,i1 = 0;

b = (double *)malloc(sizeof(double)*N);

cout<<\请输入一组数\ while(cin>>b[i1]){ i1++; if(i1>=N){

b = (double *)realloc(a,sizeof(double)*(length1+n)); length1 += n; } } sort(b,i1);

for(int j = 0;j

cout<

cout<<\请输入要查找的数:\ cin>>num1;

if(BinarySearch(b,num1,i1)!=-1){

cout<

cout<

}

return 0;

四、运行结果及分析

运算结果:

分析:

很容易看出,每执行一次算法的while循环,待搜索数组的大小减小一半。因此,在最坏情况下,while循环被执行了O(logn)次。循环体内运算需要O(1)时间,因此,整个算法在最坏情况下的时间复杂性为O(logn)。

五、总结

通过这次试验,解决了二分查找问题,加深了对分治法的理解,收获很大,同时我也理解到学习算法是一个渐进的过程,算法可能一开始不是很好理解,但是只要多看几遍,只看是不够的还要动手分析一下,这样才能学好算法。


算法设计与分析二分查找实验报告(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:18春电大《 社区护理学(本)》形考任务1

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: