二分(折半)查找:
数据对象:有序的数据集合。
原理: 每次都跟区间的中间元素对比,将待查找的区间缩小为原来的一半(若 中间值>查找值,则往数组左边继续查找;若 中间值<查找值,则往数组右边继续查找),直到找到要查找的元素,或者区间被缩小为0。
信号量:左下标left,右下标right,中间下标mid。
代码实现:1.循环 2.递归
private static int xunhuansearch(int s[],int n,int value){
int left=0;
int right=n-1;
while(left<=right){
int mid=left+((right-left)>>1);
if(value>s[mid]){
left=mid+1;
}
else if(values<s[mid]){
right=mid-1;
}
else{
return mid;
}
}
return -1;
}
private static int diguisearch(int s[],int left,int right,int value){
if(left>right)
return -1;
int mid=left+((rigth-left)>>1);
if(value == s[mid])
return mid;
else if(value>s[mid])
return diguisearch(s,mid+1,right,value);
else
return diguisearch(s,left,mid-1,value);
}