二分法(算法)
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;
}
给定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;
}
相关文章推荐
- 【高效算法设计——二分法】UVa 1607 Gates
- C语言之基本算法23—二分法求方程近似根
- iOS常见算法(二分法 冒泡 选择 快排)
- 算法--二分法查找Java代码
- 常用算法(冒泡排序、二分法查找)
- 算法图解-二分法
- 【算法练习】二分法查询
- Kotlin 二分法算法游戏--猜价格
- 【算法设计与数据结构】二分法解决最大值最小化问题—进阶篇— URAL 2034 Caravans
- 算法基础: 大数除法-二分法
- java 二分法算法的实例
- 算法总结——二分法(binary-search)
- php算法 二分法
- Python算法 折半搜索算法(二分法)
- 二分法快速查找算法
- 查找算法之二分法查找(JAVA)
- 一头扎进算法导论-二分法思想改进插入排序O(nlog2(n))
- *寒假水40——二分法之匈牙利算法
- C语言的算法--------二分法查找
- [算法][二分法查找]