算法要领:学会动态拆分,分析问题,预设方案,在预设方案中找到最优解(做算法前先想,先画图,不要慌着写代码)
- 问题分析:二分查找是什么?
必须是有序数列,时间复杂度o(logN)
字面意思,每次查找对半分,为了找到最中间的数(我们定义了left和right代表第一个数和后一个,mid为中间的数)先找到最中间的数和你要找的数对比, 如果比你要找的数大,那么将right = mid - 1(将中间的右边的数作为新 的right)如果比你要找的数小,那么将left = mid + 1;(将中间的左边的数作为新的left)然后依次类推循环(while)直到查到。
// 二分查找
public class demo01 {
public static void main(String[] args) {
int[] arr = { 1, 2, 3, 8, 9, 12, 13, 45, 54, 65, 87, 98, 668 };
int a = 64;
System.out.println(erFen(arr, a));
}
public static boolean erFen(int[] arr, int a) {
boolean flag = false;
int left = 0;
int right = arr.length - 1;
while (left <= right) {
int mid = (right + left) / 2;
if (arr[mid] == a)
return flag = true;
else if (arr[mid] < a)
left = mid + 1;
else if (arr[mid] > a)
right = mid - 1;
}
return flag;
}
}