【整理】二分查找及代码实现
2015-06-07 16:05
225 查看
二分查找算法又称折半查找算法
(1) 算法流程
假设样本数据从小到大依次排列,首先选择中间元素进行比较,如果相等,则直接返回,表示查找成功;如果 目标元素大于中间元素,则去中间元素的右侧进行查找,如果目标元素小于中间元素,则去中间元素的左侧进行查找,重复以上过程,直到找到满足条件的元素表示查找成功,或者没有找到,表示查找失败
(2) 算法评价
平均时间复杂度O(logN)
** 样本数列必须有序
******************************************************************************************
二分查找代码:
(1) 算法流程
假设样本数据从小到大依次排列,首先选择中间元素进行比较,如果相等,则直接返回,表示查找成功;如果 目标元素大于中间元素,则去中间元素的右侧进行查找,如果目标元素小于中间元素,则去中间元素的左侧进行查找,重复以上过程,直到找到满足条件的元素表示查找成功,或者没有找到,表示查找失败
(2) 算法评价
平均时间复杂度O(logN)
** 样本数列必须有序
******************************************************************************************
二分查找代码:
#include <stdio.h> //实现二分查找的功能函数 int find(int arr[], int left, int right, int data) { //保证数组中确实存在元素 if (left <= right) { //计算中间元素的下标 int p = (left + right) / 2; //寻找中间元素进行比较 if (data == arr[p]) { return p; } //如果目标元素小于中间元素,左边查找 else if (data < arr[p]) { return find(arr, left, p-1, data); } //如果目标元素大于中间元素,右边查找 else { return find(arr, p+1, right, data); } } return -1; //表示查找失败 } int main(void) { int arr[5] = {1, 2, 3, 4, 5}; printf("目标元素所有的下标是:%d\n", find(arr, 0, 4, 4)); return 0; }
相关文章推荐
- AE+C#开发问题之四——The Field type is invalid or unsupported for the operation. [Override]
- C语言多线程下不同等级日志的实现
- Java Note - Operators
- uva 1626 括号序列
- JavaIO流--创建文件和文件夹的程序实例
- 在Latex中写伪代码的两个例子
- 解决2015-06-08日之前ES脚手架项目启动不了,一直停留在spring初始化阶段(唯一解决方案)
- ASP.NET:在一般处理程序中通过 Session 保存验证码却无法显示图片?
- c++ 访问者模式
- 8.函数式编程和高阶函数
- spring jdbctemplate源码跟踪
- JavaBean
- c++在string类源
- 双树 节点 C# net Ztree linqtosql 源码
- 【整理】二叉树概念以及代码实现
- Microsoft Visual C++ Runtime Library Runtime Error解决的方式
- 在mfc中使用cef
- struts2 的 result type详解
- java spring aop 的代理的简单实现
- 设计模式之访问者模式,C++实现