一.算法分析
二分查找使用了分治的思想,递归方程为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;
}