[算法]二分查找算法
【思想】
二分搜索主要解决的问题是确定排序后的数组x[0,n-1]中是否包含目标元素target。
二分搜索通过持续跟踪数组中包含元素target的范围(如果target存在数组中的话)来解决问题。
一开始,这个范围是整个数组,然后通过将target与数组中的中间项进行比较并抛弃一半的范围来缩小范围。该过程持续进行,
直到在数组中找到target或确定包含target的范围为空时为止。在有n个元素的表中,二分搜索大约需要执行lgn次比较操作。
提供充足的时间,竟然只有10%的专业程序员能够将这个程序编写正确。
【正解】
/*********************************
* 日期:2015-01-03
* 作者:SJF0115
* 题目: 二分查找算法
* 博客:
**********************************/
#include <iostream>
using namespace std;int BinarySearch(int A[], int n, int target) {if(n <= 0){return -1;}//ifint start = 0,end = n-1;// 二分查找while(start <= end){// 中间节点int mid = (start + end) / 2;// 找到if(A[mid] == target){return mid;}//ifelse if(A[mid] > target){end = mid - 1;}//elseelse{start = mid + 1;}//else}//whilereturn -1;
}int main(){int A[] = {1,2,3,4,7,9,12};cout<<BinarySearch(A,7,9)<<endl;return 0;
}
【错解】
/*********************************
* 日期:2015-01-03
* 作者:SJF0115
* 题目: 二分查找算法
* 博客:
**********************************/
#include <iostream>
using namespace std;int BinarySearch(int A[], int n, int target) {if(n <= 0){return -1;}//ifint start = 0,end = n-1;// 二分查找while(start < end){// 错误之处// 中间节点int mid = (start + end) / 2;// 找到if(A[mid] == target){return mid;}//ifelse if(A[mid] > target){end = mid - 1;}//elseelse{start = mid + 1;}//else}//whilereturn -1;
}int main(){int A[] = {1,2,3,4,7,9,12};cout<<BinarySearch(A,7,3)<<endl;return 0;
}
错误之处在代码中已经注释。主要原因是你搜索的target正好处于start = end处。例如代码中的例子。
【错解二】
/*********************************
* 日期:2015-01-03
* 作者:SJF0115
* 题目: 二分查找算法
* 博客:
**********************************/
#include <iostream>
using namespace std;int BinarySearch(int A[], int n, int target) {if(n <= 0){return -1;}//ifint start = 0,end = n-1;// 二分查找while(start <= end){// 中间节点int mid = (start + end) / 2;// 找到if(A[mid] == target){return mid;}//ifelse if(A[mid] > target){end = mid; // 可能引起错误之处}//elseelse{start = mid; // 可能引起错误之处}//else}//whilereturn -1;
}int main(){int A[] = {1,2,3,4,7,9,12};cout<<BinarySearch(A,7,12)<<endl;return 0;
}
[算法]二分查找算法相关推荐
- C++ 语言基础 —— STL —— 算法 —— 二分查找算法
STL 中,在 <algorithm> 头文件里提供了两个利用二分查找的方法在一个排好序的数组中进行查找. 在一个从小到大的排好序的数组中: lower_bound(begin,end,n ...
- 【007】 二分查找算法(Binary Search)
文章目录 1. 二分查找算法 2. 算法思想 3. 代码实现 4. 示例代码 5. 算法最好/最坏情况 1. 二分查找算法 二分查找算法也称为"折半查找",它是一种高效的查找技术, ...
- 二分查找算法的一点改进
在计算机科学中,二分查找,是一种在有序数组中查找某一特定元素的搜索算法.这种搜索算法每一次比较都使搜索范围减半.第一篇二分查找的论文发表于1946年,然而第一个没有bug的二分查找算法却是在1962年 ...
- java 二分查找_计算机入门必备算法——二分查找法
1.引言 笔者对于计算机的研究一直停滞不前,近期想对一些算法进行复习和进一步的研究,每天都会更新一个新的算法,算法有难有易,层层递进.不希望能学的有多么高深,只希望在一些最基本的算法上有编码的思路,或 ...
- 二分查找算法的两种实现方式:非递归实现和递归实现
二分查找的条件是对一组有序数组的查找,这一点很容易忘记,在使用二分查找的时候先要对数组进行排序. 先说一下二分查找的思路:一个有序数组,想要查找一个数字key的下标,首先算出中间下标mid,利用mid ...
- 二分查找算法为什么要先排序
其实二分查找算法就和我们在一个英文字典中找一个单词一样,比如要找middle这个单词,先把字典翻到大概中间的位置,那么现在字典就被分成两个部分了,middle这个单词要么在第一个部分,要么在第二个部分 ...
- LeetCode面试刷题技巧-二分查找算法代码思路解析
二分查找的思想 提及二分查找算法,我想大部分人都不陌生,就算不是学计算机的,基本上也都使用过二分查找的思想,不信的话,且听我慢慢为你道来. 不知道你有没有玩过这样一个游戏,猜数字.就是说一个人心里想了 ...
- Python 二分查找算法
如果有这样一个列表,让你从这个列表中找到66的位置,你要怎么做? l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76 ...
- 二分查找算法(递归与非递归两种方式)
首先说说二分查找法. 二分查找法是对一组有序的数字中进行查找,传递相应的数据,进行比较查找到与原数据相同的数据,查找到了返回1,失败返回对应的数组下标. 采用非递归方式完成二分查找法.java代码如下 ...
最新文章
- html中怎么隐藏复选框,隐藏复选框字段HTML
- 菜鸟建站别发愁,省钱建站新攻略!
- 剑桥少儿英语预备级教案(上) unit15 I can draw it.
- win10怎么用Linux命令,教你Windows10系统使用Linux命令的技巧
- Unity3D学习笔记之五为Prefab添加材质
- 自定义Spring Data JPA存储库
- [css] 使用css实现一个loading的效果
- 前台setcookie之后从后台取出来_后台设置Cookie值,前台进行获取
- python不用sort排序_Python排序之sortamp;sorted
- npm 安装 -D 和-S的区别
- 【CodeVS】 p1696 奇怪的函数
- arailsdemo 1
- $smary模板缓存
- 太阳高度角计算题_正午太阳高度变化及计算(模拟题组)
- ADNI数据集阅读整理
- 今晚与小妹亚美合作了一把qq游戏,大获全胜!
- Stitcher: Feedback-driven Data Provider for Object Detection 论文学习
- 如何提高程序员键盘使用效率
- 离散数学复习:二元关系
- Java集合判空/非空
热门文章
- 2020年塔式起重机司机多少分及格及塔式起重机司机考试技巧
- 英语专业有必要学python吗-我英语不好,能学会编程吗?
- 手机端上线,破解高架区域偏航检测难题,高德提出工业级轻量模型ERNet
- 大疆开发前,需要了解的东西(Onboard SDK)
- 【C语言程序】将字符串“Where there is a will,there is away.”保存到字符数组中,然后将其翻译成中文“有志者事竟成。”
- 2020中兴捧月算法精英挑战赛-迪杰斯特拉派初赛(未来城市物流系统)总结
- [SDK]Unity接入Facebook SDK获取用户头像
- 时间和空间复杂度计算
- Excel单元格部分字体颜色Python实现
- macOS下VSCode 使用记录(使用调试运行 Python/C 等)