/**
* 二分查找(折半查找):数组需有序 (1,2,3,4,5)
* 1.定义最大,最小索引
* 2.计算出中间索引
* 3.根据中间索引比较
* 相等:直接返回当前的索引
* 不想等:
* 大于:左边找数据
* 小于:右边找数据
* 4.重新计算最大或最小索引
* 大于:中间索引-1
* 小于:中间索引+1
* 5.回到第2部重新计算
*
* 可以根据运行结果来查看执行顺序
*
*/
@Test
public void test3() {
int[] arr = { 11, 22, 33, 44, 55, 66 };
int findNum = 0;// 要查找的数字
System.out.println(test2(arr, findNum));
}
public int test2(int[] arr, int findNum) {
// 1.定义最大最小索引
int min = 0, max = arr.length - 1;
// 2.计算中间索引
int mid = (max + min) / 2;
while (arr[mid] != findNum) {// 第一次我用的for改成while了,while较好
// 3.根据中间索引比较
if (arr[mid] > findNum) {
// 3.2大于:左边找数据
max = mid - 1;
} else if (arr[mid] < findNum) {
// 3.3小于右边找数据
min = mid + 1;
}
// 当最小值大于最大值则要查找的值不存在
if (min > max) {
return -1;
}
mid = (max + min) / 2;
}
return mid;
}
Java 数组二分法(节省查找时间)
最新推荐文章于 2023-03-30 20:27:28 发布