二分法(算法)
来源:互联网 发布:安徽网络作家 编辑:程序博客网 时间:2024/05/04 09:32
查找算法中的“二分法”是这样定义的:
给定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;
- }
0 0
- 二分法(算法)
- 算法---二分法
- 二分法 -算法
- C++ 二分法查找算法
- C++二分法查找算法
- 二分法搜索算法
- 算法:二分法查找
- 【算法练习】二分法查询
- 二分法排序算法
- 算法--二分法查找
- 二分法查表 算法
- 【基础算法】二分法查找
- 算法-二分法查找数据
- 《算法导论》二分法排序
- 编程算法之二分法
- 算法之二分法查找
- 二分法查找算法
- Java 二分法查找算法
- 《数据结构》复习笔记--堆栈
- FOJ 1319 Blocks of Stones[ 区间 ]
- Hrtimer
- 连续正整数(1077)
- Android学习笔记之圆角的实现
- 二分法(算法)
- C++的64位扩展
- 探究 List<T> 集合的Where方法是如何实现的
- 灰度图像--频域滤波 傅里叶变换之离散傅里叶变换(DFT)
- 常用知识点-NSTimer
- grep 目录文件输出匹配内容N行(解决输出不换行)
- C编译器剖析_1.5 结合C语言来学汇编_整数运算
- Eclipse或Myeclipse导出JAR包以及如何合并两个JAR
- 51单片机第六弹---LCD液晶显示模块