算法学习之二分查找

一.算法分析

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


 

你可能感兴趣的:(算法学习之二分查找)