一个简单的小案例使用了二分法查找数组元素。
public class TestBinarySearch {
public static void main(String[] args) {
int[] arr = {30, 20, 50, 10, 80, 9, 7, 12, 100, 5, 40, 8};
Arrays.sort(arr); //先将数组排序
System.out.println(Arrays.toString(arr));
System.out.println(myBinarySearch(arr,40));
}
public static int myBinarySearch(int[] arr, int value) {
int low = 0;
int high = arr.length - 1;
while (low <= high) {
int mid = (low + high) / 2;
if (value == arr[mid]) {
return mid;
}
if (value > arr[mid]) {
low = mid + 1;
}
if (value < arr[mid]) {
high = mid - 1;
}
}
return -1;
}
}
以下是思路:
1.定义一个初始数组。
int[] arr = {30, 20, 50, 10, 80, 9, 7, 12, 100, 5, 40, 8},
2. 通过方法将数组排序
Arrays.sort(arr)
3.定义两个变量,分别是数组的开始索引和结束索引
int low = 0;
int high = arr.length - 1;
4.通过while循环遍历数组里所有的元素
while (low <= high) {
//先通过计算得出数组中间的索引
int mid = (low + high) / 2;
//判读是否是需要查找的值是否==数组的中间索引的值
//如果是返回中间索引
if (value == arr[mid]) {
return mid;
}
//如果大于数组中间索引的值,将开始索引设为中间索引的后一位
if (value > arr[mid]) {
low = mid + 1;
}
//如果小于数组中间索引的值,将结束索引设为中间索引的前一位
if (value < arr[mid]) {
high = mid - 1;
}
}
5.如果数组没有要查找的值
return -1