二分法查找

查找算法中的“二分法”是这样定义的:

    给定N个从小到大排好序的整数序列List[],以及某待查找整数X,我们的目标是找到X在List中的下标。即若有List[i]=X,则返回i;否则返回-1表示没有找到。

    二分法是先找到序列的中点List[M],与X进行比较,若相等则返回中点下标;否则,若List[M]>X,则在左边的子系列中查找X;若List[M]<X,则在右边的子系列中查找X。

    试写出算法的伪码描述,并分析最坏、最好情况下的时间、空间复杂度。

int search(int List[],int x);
{
	int f=-1;
	min=0;
	max=strlen(List);
	n=(max+min)/2;
	while(min<max)
	{
		if(List[n]>x)
		max=n;
		else
		min=n;
		n=(max+min)/2;
		if(List[n]==x)
		f=n;
	}
	return f;
}

空间复杂度:S(n)=n;  n个数需要存n个所以空间复杂度为n。
时间复杂度:
最坏时间复杂度为找不到List[n]==x的情况:T(n)=O(log2(n));
最好时间复杂度:一次就找到。T(n)=O(1); 

你可能感兴趣的:(二分法查找)