您的位置:首页 > 其它

二分法查找

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循环重新开始工作。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  二分法算法