算法第二章上机实践报告
1.题目:
输入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
2.问题描述:用二分查找 在一个数组中找一个数
3.算法描述:二分法查找,没退出循环前都要比较次数+1。
int BinarySearch(int *a, int n,int m){
int low = 0; int high = n-1;
int compare = 0;
while(low<=high){
int mid = (low+high)/2;
compare++;
if(m==a[mid]){
cout<<mid<<endl;
return compare;
}
else if(m>a[mid]){
low = mid+1;
}
else{
high = mid-1;
}
}
cout<<-1<<endl;
return compare;
}
4.算法时间复杂度及空间复杂度
运用了二分法,把规模为n每次都减少一半左右,即o(logN),
空间复杂度为o(1)
5.心得体会(对本次实践收获及疑惑进行总结)
这个二分查找的算法中间出过几次bug,与代码不精简
1.没有return 导致死循环

2.compare++写在每一个if中,代码冗杂