标签:存在 通过 if语句 div 题目 sea 判断 总结 else
1.实践题目
输入n值(1<=n<=1000)、n个非降序排列的整数以及要查找的数x,使用二分查找算法查找x,输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。
2.问题描述
用二分法在输入的有序排列整数中查找数x。若找到,输出x的下标和比较次数;若找不着,输出-1和比较次数。
3.算法描述
由于此问题只是比书上的二分搜索算法多输出一个比较次数,所以我用变量k来记录比较次数,并在二分搜索法的变量中用&k来改变k的值。
由于要同时输出两个数据,所以当条件成立时我直接在函数中进行输出;当条件不成立时我用if语句进行判断后进行输出。
函数算法:
int BinnarySearch(int a[],int left,int right,int x,int &k) { if(left>right) return 0; int m=(right+left)/2; if(a[m]==x) { k++; cout<<m<<endl<<k; return 1; } if(a[m]>x) { k++; BinnarySearch(a,left,m-1,x,k);} else { k++; BinnarySearch(a,m+1,right,x,k); } }
main函数中if语句的判断:
if (BinnarySearch(a,0,n-1,x,k)==0) cout<<-1<<endl<<k;
4.算法时间及空间复杂度分析(要有分析过程)
由于本题空间复杂度为o(1),时间复杂度T(n)=o(1)+T(n/2),故本题时间复杂度为o(1)。
5.心得体会(对本次实践收获及疑惑进行总结)
对我而言,本次实践的难点为如何返回比较次数的值,因为函数中无法同时返回下标和比较次数两个值,后来发现可以通过&k来改变main函数中的k值(k为比较次数),故BinnarySearch函数中只需返回一个值即可,本题就很好解决了。
标签:存在 通过 if语句 div 题目 sea 判断 总结 else
原文地址:https://www.cnblogs.com/Pak-Ho/p/9786028.html