二分查找
解题思路
假设列表已从小到大排序,并设置low,high点为队列首尾位置。
选取列表中间位置,比较查找目标值与中间位置值大小。
若比目标值大,则说明目标值可能存在中间值前面,将high设置为中间位置前一位置。
若比目标值小,则说明目标值可能存在中间值后面,将low设置成为中间位置后一位置。
若和目标值一样,则找到目标值,退出。
通过最小的low, high设置新的队列,循环执行2。
若最后循环到只剩下一个值依然没有找到,则返回-1,表示没找到。
图解示例

代码实现
public static int searchFun(int arr[], int target) {
int mid, low, hight;
low = 0;
hight = arr.length - 1;
while (low <= hight) {
mid = (low + hight) / 2;
if (arr[mid] == target) {
return mid;
}
else if (arr[mid] > target) {
hight = mid - 1;
}
else {
low = mid + 1;
}
}
return -1;
}