题目:对于定一个升序的数组a,需要查找数n在数组a中的位置,若不存在n则返回-1。
#include <iostream>
using namespace std;
int find(int n,int *a,int start,int end){
if (end == start)return a[end] == n ? end : -1;
int mid = (end - start) / 2 + start;
if (a[mid] > n){
int n_end = mid - 1;
n_end = n_end < 0 ? 0 : n_end;
return find(n,a,start,n_end);
}
if (a[mid] < n){
int n_start = mid + 1;
return find(n, a, n_start, end);
}
if (a[mid] == n){
return mid;
}
}
int main()
{
int a[] = {0,1,2,3,4,5,6,7,8,9};
cout << find(7, &a[0],0, 9) << endl;
cout << "end" << endl;
system("pause");
}
二分查找的时间复杂度log2(n),可以这么理解,对于长度为n的数组,每次查找都会减半,那么最差的情况就是把数组砍到只剩一个数,此时砍了log2(n)次。