二分搜索
来源:互联网 发布:用js修改css样式 编辑:程序博客网 时间:2024/05/17 01:57
二分搜索法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务。它的基本思想是,将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到x,算法终止。如果x<a[n/2],则我们只要在数组a的左半部继续搜索x(这里假设数组元素呈升序排列)。如果x>a[n/2],则我们只要在数组a的右半部继续搜索x。二分搜索法的应用极其广泛,而且它的思想易于理解,但是要写一个正确的二分搜索算法也不是一件简单的事。第一个二分搜索算法早在1946年就出现了,但是第一个完全正确的二分搜索算法直到1962年才出现。Bentley在他的著作《Writing Correct Programs》中写道,90%的计算机专家不能在2小时内写出完全正确的二分搜索算法。问题的关键在于准确地制定各次查找范围的边界以及终止条件的确定,正确地归纳奇偶数的各种情况,其实整理后可以发现它的具体算法是很直观的,我们可用C++描述如下:
#include"iostream.h"int main(){ int bs(int a[],int y,int n); int a[10]={1,5,6,32,36,56,62,74,98,150}; int y=56; int i=bs(a,62,10); cout<<"我求的是在数组a,a[10]={1,5,6,32,36,56,62,74,98,150}中找数字56的位置"<<endl; if(i==-1) cout<<"这个数不在数组中"<<endl; else cout<<"这个数是数组的第"<<i+1<<"个数"<<endl; return 0;}int bs(int a[],int y,int n){int right=n-1;int left=0;int midd;while(left<=right){midd=(left+right)/2;if(y==a[midd])return midd;if(y>a[midd])left=midd+1;elseright=midd-1;}return -1;}
- 二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- 二进制搜索小函数 —— membin
- servlet中文乱码问题
- C# 16进制与字符串、字节数组之间的转换
- 在Word 宏 VBA循环中使用on error的错误处理方法
- 关于矩阵的一些操作(求转置矩阵、行列式、矩阵的秩、矩阵的逆矩阵、两个矩阵的乘积矩阵)
- 二分搜索
- 链接外部库
- 关于最近
- ee电子商务项目中遇到的一些问题
- linux下的“分离控制”思想
- google地图密钥申请与将google地图集成到自己的程序中(附源代码)
- 单例模式
- 多线程编程之私有数据(Thread-Specific-Data,或TSD)
- 远程主机强迫关闭了一个现有的连接。