二分查找
public class BSearch {
public static void main(String[] args) {
int[] A = {1, 2, 3, 5, 6};
int res = bSearch(A, A.length, 6);
System.out.println(res);
int res2 = search(A, A.length, 6);
System.out.println(res2);
}
public static int bSearch(int[] a, int n, int val) {
int low = 0;
int high = n - 1;
while (low <= high) {
int middle = low + (high - low) / 2;
if (a[middle] == val) {
return middle;
} else if (a[middle] < val) {
low = middle +1;
} else {
high = middle - 1;
}
}
return -1;
}
public static int search(int[] a,int n,int val){
return _search(a ,0,n-1,val);
}
private static int _search(int[]a,int low,int high,int val){
if(low>high){
return -1;
}
int middle = low + (high - low) / 2;
if(a[middle]== val){
return middle;
}else if(a[middle]< val){
return _search(a,middle+1,high,val);
}else{
return _search(a,low,middle-1,val);
}
}
}
有重复值,找第一个
大于某值的第一个数
ip地址查找