二分法查找
int low = 0;
int high = arr.length-1;
int mid = -1;
while(low<=high){
mid = (low+high)/2;
if(arr[mid]<value){
low = mid + 1;
}else if(arr[mid]>value){
high = mid - 1;
}else{
break;
}
}
if(low<=high){
System.out.println("可以找到:index="+mid+"。");
}else{
System.out.println("无法找到!");
}
二分法思想是取中比较:
1、求有序序列arr的中间位置mid。
2、k为要查找的数字。
若arr[mid] = k,查找成功;
若arr[mid] > k,在前半段中继续进行二分查找;
若arr[mid] < k,则在后半段中继续进行二分查找。
假如有一组数为3、12、24、36、55、68、75、88要查给定的值k=24。可设三个变量low、mid、high分别指向数据的上界,中界和下界,mid=(low+high)/2。
A.开始令low=0(指向3),high=7(指向88),则mid=3(指向36)。因为 k < mid,故应在前半段中查找。
B.令新的high=mid-1=2(指向24),而low=0(指向3)不变,则新的mid=1(指向12)。此时k>mid,故确定应在后半段中查找。
C.令新的low=mid+1=2(指向24),而high=2(指向24)不变,则新的mid=2,此时k=arr[mid],查找成功。
如果要查找的数不是数列中的数,例如k=25,当第四次判断时,k>mid[2],在后半段查找,令low=mid+1,即low=3(指向36),high=2(指向24)出现low>high的情况,表示查找不成功。