21天挑战赛第二周,本文主要是讲述有关二分查找的知识
活动地址:CSDN21天学习挑战赛
二分查找适用于有序数组中
如下图所示,当我们要找到元素79时,先找数组的当中的元素81,由于79比81小,所以在左侧找(红框),重新定max和mid再寻找
public class BinarySearch {
public static void main(String[] args) {
// input data
int[] a = {7,23,79,81,103,127,131,147};
int key = 11;
// 调用算法,并输出结果
int result = search(a, key);
System.out.println(result);
}
private static int search(int[] a,int key){
// 初始化变量
int min = 0;
int max = a.length - 1;
//通过循环找到要查找的元素
while (true){
int mid = (max + min) / 2 ;
if(min > max){
return -1;
}
// 情况1:比key大
}else if(a[mid] > key){
max = mid - 1;
// 情况2:比key小
}else if(a[mid] < key){
min = mid + 1;
}
//情况3:找到了
else{
return mid;
}
}
}
}
二分查找较简单,但是要注意数组一定要是有序的