二分适用于:数据呈现某种规律(有序) ;
算法 时间复杂度 log(n);
实现
- 循环实现,没瑕疵的
public static int binarySearch(int[] arr, int num) {
int nuMax = arr.length - 1;
int nuMin = 0;
while (nuMin <= nuMax) {
//防止溢出
int middle = ((nuMax - nuMin) >> 1) + nuMin;
// int middle = (nuMax+nuMin)>>1 + 1;
if (arr[middle] == num) {
return middle;
} else if (arr[middle] < num) {
nuMin = middle + 1;
} else{
nuMax = middle - 1;
}
}
return -1;
}
- 递归
public static int binarySearch(int[] arr, int num, int nuMin, int nuMax) {
int middle = ((nuMax - nuMin) >> 1) + nuMin;
while (nuMax >= nuMin) {
if (arr[middle] == num)
return middle;
else if (arr[middle]< num){
return binarySearch(arr,num,middle+1,nuMax);
}else
return binarySearch(arr,num,nuMin,middle -1);
}
return -1;
}