1.普通查找:
首先要遍历数组,获取每个元素,判断当前遍历的元素是否和要查找的元素相同,相同的话就返回该元素的索引,没找到,手动返回 -1
2.二分查找:
每一次都去获取数组的中间索引对应的元素,然后和要查找的元素进行比对,如果相同返回索引,如果不同,就比较中间元素和要查找的元素的值
如果中间元素的值 【大于】 要查找的元素,说明要查找的元素在左侧,那么就从左侧按照上述思想继续查询(右侧数据忽略)
如果中间元素的值 【小于】 要查找的元素,说明要查找的元素在右侧,那么就从右侧按照上述思想继续查询(左侧数据忽略)
【二分查找对数组是有要求的,数组必须已经排好顺序】
3.代码演示:
public class Tests {
public static void main(String[] args) {
int[] arr= {10,14,21,38,45,47,53,81,87,99};
System.out.println(binarySearch(arr,10));// 0
System.out.println(binarySearch(arr,100));// -1
System.out.println(binarySearch(arr,81));// 7
}
public static int binarySearch(int[] arr,int num){
// 1.定义一个变量,记录左边元素的索引,初始值为0
int left = 0;
// 2.定义一个变量,记录右边元素的索引,初始值为arr.length - 1
int right = arr.length-1;
// 3. while循环查找,循环的条件:记录左边元素的索引 <= 记录右边元素的索引
while (left<=right){
// 4.计算中间元素的索引
int mid = (left+right)/2;
// 5.判断中间索引对应的元素与要查找的元素进行比较判断
if (arr[mid] == num){
// 6.如果中间索引对应的元素等于要查找的元素,那么就直接输出打印
return mid;
} else if (arr[mid] < num){
// 6.如果中间索引对应的元素 小于 要查找的元素,说明要查找的元素在右边,
//那么记录左边元素的索引就更改为 中间索引 + 1 (因为左侧不考虑)
left = mid+1;
} else {
right = mid-1;
}
}
return -1;
}
}