二分查找算法
2016-05-17 12:28
387 查看
二分查找法:
二分查找法主要是解决在“一堆数中找出指定的数”这类问题。而想要应用二分查找法,这“一堆数”必须有一下特征:
存储在数组中
有序排列
所以如果是用链表存储的,就无法在其上应用二分查找法了。(曽在面试被问二分查找法可以什么数据结构上使用:数组?链表?)
至于是顺序递增排列还是递减排列,数组中是否存在相同的元素都不要紧。不过一般情况,我们还是希望并假设数组是递增排列,数组中的元素互不相同。
算法图解:
![](http://images2015.cnblogs.com/blog/948472/201605/948472-20160517120732623-1679971012.png)
递归实现:
template <typename T> int BinarySearch(const T* arr, int start, int end, const T& value) { if (start<=end) { int middle = (end - start) / 2 + start; if (arr[middle] < value) { start = middle + 1; return BinarySearch(arr, start, end, value); } else if (arr[middle] > value) { end = middle - 1; return BinarySearch(arr, start, end, value); } else return middle; } return -1; }
非递归实现:
template <typename T> int BinarySearchWhithoutRecursion(const T* arr, int start, int end, const T& value) { int middle; while (start <= end) { middle = (end - start) / 2 + start; if (arr[middle]>value) end = middle - 1; else if (arr[middle] < value) start = middle + 1; else return middle; } return -1; }
这个是我自己对二分查找应用的一些总结:
/article/11862924.html
这博客讲解二分查找非常详细:
/content/4175985.html
相关文章推荐
- poj1651矩阵连乘(DP)+路径
- Visual Studio Code中文文档(一)-快速入门
- 最小费用最大流-POJ-2195-Going Home
- 使用 NGINX 进行微程序缓存的好处
- 证券
- 基于ListView的滑动删除、添加、修改
- 文件存储与B+数据结构
- 【MATLAB 学习笔记】 SimMechanics 流程攻略(1)
- 一个牧场目前一共有20头刚出生的羊,母羊、公羊各一半。假如母羊5岁时后每年生一胎(母羊,公羊各一半)。羊活到10岁后死亡。请问20年后这个牧场有多少只羊? 请用C#写出算法。
- 2016 UESTC Training for Dynamic Programming P - 柱爷的矩阵 矩阵、递推
- php面试总结
- 剑指offer03--空格用%20替换
- Python多线程编程
- 第10,11周 项目一(3)
- 使用 NGINX 进行微程序缓存的好处
- JavaScript经典题目汇总
- MySQL事务管理+安全管理+MySQL数据类型
- 指针和数组名
- 应用服务器知识(5)--Tomcat源码分析
- Servlet监听器