您的位置:首页 > 其它

二分法(算法)

2015-01-16 20:03 155 查看
查找算法中的“二分法”是这样定义的:

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

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

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

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

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

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



#include <iostream>
using namespace std;

int Search(int X,int N,int List[])
{
int start=0,end=N-1,m=(start+end)/2;
if (X>List[end]||X<List[start])
return -1;
while (List[start]!=List[end]) //大的循环体
{
if (X==List[m])
{
cout<<m<<endl;
return -1;
}
else if(X<List[m])
{
end=m-1;
m=(start+end)/2; //重新定位中点的位置
}
else//X>List[m]
{
start=m+1;
m=(start+end)/2;
}
}
while(List[start]==List[end]) //所有数均相等的情况
{

if (X==List[start])
{
cout<<start<<endl;
return -1;
}
else
return -1;
}

}

int main()
{
int List[]={8,9,12,19,20,51,63,74,82,97};
Search(63,10,List);
return 0;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: