二分查找使用了分治的思想,递归方程为T(n)=T(n/2)+(-)(1),算法复杂度为O(lgn),比线性的查找方式快了许多,但是条件是该方程必须是排好序的,否则时间就会退化成线性时间。
#include <iostream> #include <cstring> #include <algorithm> using namespace std; int cmp(const void *a,const void *b) { return *(int *)a>*(int *)b?1:-1; } int find(int *a,int keyword,int s,int e) { int mid; mid=(s+e)/2; if(a[mid]==keyword) return mid; else if(s==e) return -1; else if(a[mid]<keyword) return find(a,keyword,mid+1,e); else find(a,keyword,s,mid-1); } int main() { while(1) { int keyword; cin>>keyword; int a[]={4,1,5,6,4,6,20,13,6,7}; qsort(a,10,sizeof(a[10]),cmp); for(int i=0;i<10;i++) { cout<<a[i]<<" "; } cout<<endl; cout<<find(a,keyword,0,9)<<endl; } return 0; }