标签:pre 没有 时间复杂度 数组 定义 space 算法 退出 进入
1.实践题目:7-1 二分查找
2、题目描述:在a[n]数组中使用二分查找算法查找x,输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。
3、算法描述
#include<iostream> using namespace std; int BinarySearch(int a[], int left, int right,int x,int &count){ count++; if(left == right){ if(x == a[left]) return left; else return -1; } while(left < right){ int mid = (left + right) / 2; if(x == a[mid]) { return mid; } if(x < a[mid]) return BinarySearch(a, left, mid-1, x, count); if(x > a[mid]) return BinarySearch(a, mid+1, right, x, count); } } int main(){ int n, x; cin >> n ; int a[n]; for(int i = 0; i<n; i++){ cin >> a[i]; } cin >> x; int count = 0; cout << BinarySearch(a, 0, n-1, x, count)<<endl; cout << count; return 0; }
4、算法时间及空间复杂度分析:利用二分递归查找找出X的下标,同时每进入一次递归,比较次数加1,这样空间复杂度为1,(并没有额外利用空间),时间复杂度为二分递归的时间复杂度 O(nlog n);
5、心得体会:二分查找可以有效节省时间,其实这题也就是二分查找的一个小小的添加(添加了比较次数),对递归而言,考虑比较次数应从退出递归着手,同时变量定义的位置和初始值应尤为注意。
标签:pre 没有 时间复杂度 数组 定义 space 算法 退出 进入
原文地址:https://www.cnblogs.com/dalili/p/9827607.html