1.实践题目
运用二分查找找出x的下标。
2.问题描述
输入n值(1<=n<=1000)、n个非降序排列的整数以及要查找的数x,使用二分查找算法查找x,输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。
输入格式:
输入共三行: 第一行是n值; 第二行是n个整数; 第三行是x值。
输出格式:
输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。
输入样例:
4
1 2 3 4
1
输出样例:
0
2
3.算法描述
#include<iostream> using namespace std; int Search(int a[], int &x, int n,int &z){ int l=0; int r=n-1; z=0; while (l<=r){ z++; int m=(l+r)/2; if(x==a[m]) { return m; } if(x>a[m]) { l=m+1; } else r=m-1; } return -1; } int main(){ int a[10000], n, x,z; cin>>n; for(int i=0;i<n;i++){ cin>>a[i]; } cin>>x; int count=Search(a,x,n,z); cout<<count<<endl; cout<<z; return 0; }
4.算法时间及空间复杂度分析
运行中只有主函数里面的一个for循环,所以时间复杂度为o(n),又由于辅助空间是常数级别的所以空间复杂度是O(1)。
5.心得体会(对本次实践收获及疑惑进行总结)
这道题用了一个函数建立了一个二分查找的算法,然后再返回查找数x的坐标,秒啊秒啊。