有序数组的查找(个人感觉美到极致的一个算法)
2016-07-16 19:54
369 查看
对于包含n个元素的数组,整个查找过程大约要经过logn次比较。(二分查找算法)
代码如下:
非递归版本
递归版本
代码如下:
非递归版本
int BinarySearch(int array[],int n,int value) { int left = 0; int right = n-1; //如果上面这句是int right = n的话,则下面有两处需要改动 //while(left < right) //array[middle]>value的时候 right = mid(基本没有这样写的) while (left <= right) { int mid = left + ((right-left)>>1);//位运算更快 if (array[mid] > value) { right = mid-1; } else if (array[mid] < value) { left = mid+1; } else return mid;//返回的是位置 } return -1; }
递归版本
int BinarySearch(int array[],int left,int right,int value) { if (left > right) { return -1; } int mid = left + ((right-left)>>1); if (array[mid] > value) { return BinarySearch(array,left,mid-1,value); } else if (array[mid] < value) { return BinarySearch(array,mid+1,right,value); } else return mid; }
相关文章推荐
- SQLALCHEMY 中查询一直返回空的问题
- 安卓5.0之后的新控件TabLayout
- 序列化yu 反序列化
- WPF中DataGrid数据绑定(泛型和datatable)
- poj1062 CodeVS1324 浙江省选2002 昂贵的婚礼
- 位操作运算符及应用
- SAP MRKO如何操作
- Java内部类的作用
- 使用maven管理引入jdk1.8
- 使用ASP.Net WebAPI构建REST服务(一)——简单的示例
- javascript
- Miktex 2.9+Texmaker 4.4.1安装及中英PDF生成过程
- 如何快速搭建一个完整的移动直播系统?
- CodeForces 686A-Free Ice Cream
- Idea 2016 激活码
- Android开发中的Handler总结
- android 闪光灯编程
- 前端资源-我的前端兵器库
- 最大熵模型 Maximum Entropy Model
- Eculid算法 以及Extend_Eculid算法 证明及实现