二分法查找
2016-03-13 10:52
267 查看
项目里面里面的算法涉及到了二分法算法,今天把它整理出来。
二分法的基本思路,就是把一个一个排好顺序的,分为高位,低位,中间,如果当前值等于中间值,则把它取出。如果当前值小于中间值,则从左边取,并且把左边再次分为高位,低位,中间。同理,如果高于中间值,并且把右边再次分为高位,低位,中间。比较取值(取下标的值)。
实现的算法
举个简单的例子:
二分法的基本思路,就是把一个一个排好顺序的,分为高位,低位,中间,如果当前值等于中间值,则把它取出。如果当前值小于中间值,则从左边取,并且把左边再次分为高位,低位,中间。同理,如果高于中间值,并且把右边再次分为高位,低位,中间。比较取值(取下标的值)。
实现的算法
public static int testDichotomy(int[]a int num){ int low =0; // 低位 int upper = a.length()-1; //高位 下表从0开始的,固长度 -1; int mid =0; //中间值 //while循环 while(low <= upper){ mid = (low+upper)/2; if(a[mid] > num){ upper =mid-1; }else if(a[mid] < num){ low = mid+1; }else{ return mid; } } return -1; }
举个简单的例子:
int[] a={9,10,22,30,90}; 这是一个int型的数组 低位low = 0; 高位upper = 5-1 =4; low< upper,while循环开始 中间位 = 0+4/2 =2; // 下标 假设我们要查询 30 这个值的下标, 则这时的低位 low=mid +1 = 2+1 =3; 低位和高位的值 大小重新比较。如果小于,while循环重新开始工作。。
相关文章推荐
- Android 组件之Service解析
- 使用java中replaceAll方法替换字符串中的反斜杠
- 类的静态数据成员初始化问题
- HDU1021Fibonacci Again
- 【Xcode使用技巧】Xcode环境变量(environment variables)
- 欢迎使用CSDN-markdown编辑器
- Android6.0权限管理-PermissionsDispatcher
- SZU2
- DSS中间件介绍
- Linux基础--权限管理
- 项目四-用循环求(1)
- MySQL数据库总结(2)增删改查
- 12.程序运行为啥需要内存
- Java系统调优:内存管理与垃圾回收
- android ui
- 浏览器工作原理详解
- BaseAdapter的使用与优化
- 计数排序、桶排序和基数排序
- 试用EVGA公版GTX980
- 堆优化SPFA