二分查找比较好理解,就是将排好序的数组一分为二,将指定的数值与数组中间值比较,根据比较的结果,将索引值进行移动,再与移动后的索引值中间值进行比较,直到找到该数值,或发现不存在为止。
public static int getNum(int[] arr, int num) {
int min = 0;//最小索引值
int max = arr.length;//最大索引值
int mid = (min + max) / 2;//中间索引值
//将指定的值与数组的中间索引值的元素比较
while (true) {
if (num < arr[mid]) {
max = mid = 1;//小于中间索引值,最大索引值移动至中间索引值-1
} else if (num > arr[mid]) {
min = mid + 1;//大于中间索引值,最小索引值移动至中间索引值+1
} else {
return mid;//返回找到的索引值
}
mid = (min + max) / 2;//比较一次后重新计算中间索引值
if(max<min){
return -1;//如果不存在该数值,返回-1
}
}
}
|
|