算法学习之二分查找

来源:互联网 发布:单片机红外发射 编辑:程序博客网 时间:2024/06/11 21:10

一.算法分析

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


 

0 0