查看二分查找的变种,移步文章【你真的会写二分查找吗】
二分查找就是将查找的键和子数组的中间键作比较:
- 如果被查找的键小于中间键,就在左子数组继续查找;
- 如果大于中间键,就在右子数组中查找,
- 否则中间键就是要找的元素。
public class BinarySearch {
public static void main(String[] args) {
int[] list = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
System.out.println(binarySerach(list, 4));
}
public static int binarySerach(int[] list, int key) {
int len = list.length;
int left = 0;
int right = len - 1;
while (left <= right) {//必须是<=
int mid = (left + right) / 2;
System.out.println("finding..." + left + " " + mid + " " + right);//这个注释可以看二分查找的流程
if (list[mid] == key) {
return mid;
} else if (list[mid] < key) {//mid的基础上+1或者-1, 防止出现死循环
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;//找不到的话就返回-1
}
}