学习目标:
java实现二分查找
学习时间:
2021.3.29 16:19:31
学习产出:
前提:数组是有序数组,升序或者降序均可;
二分查找的原理:
原理:将数组分为两份,首先取出中间值,判断查找值是否等于中间值,如果等于,则直接返回,否则将数组以中间值为分割线进行分割,再判断查找值和中间值的大小关系,如果查找值小于中间值,则从 中间值前面的数组中查找(不包括中间值,因为已经做过比较了),否则从后面的数组中查找,递归实现全部查找,如果最后没有找到,在循环外返回找不到即可!
代码解释
package com.lian.convert;
/**
* @author :LSS
* @description: 二分查找
* @date :2021/3/29 14:55
*/
public class BinarySearch {
//定义全局静态变量i,记录查询次数
private static int i = 1;
public static void BinarySearch(int[] nums, int start, int end, int Target) {
//定义中间值
int median = (start + end) / 2;
if (Target == (nums[median])) { // 第一步判断,查找值是否等于中间值,等于直接输出
System.out.println("第" + i + "次查找,查找区间为" + start + "-" + end + "元素" + Target + "被找到,下标为" + median);
} else if (Target < nums[median]) { //第二次判断,查找值是否小于中间值,小于则缩小范围在前半部分查找
System.out.println("第" + i + "次查找!查找区间为" + start + "-" + end);
i++;
BinarySearch(nums, start, median - 1, Target);
} else { //第三次判断,查找值是否大于中间值,小于则缩小范围在后半部分查找
System.out.println("第" + i + "次查找!查找区间为" + start + "-" + end);
i++;
BinarySearch(nums, median + 1, end, Target);
}
if (i == 1)
System.out.println("你要查找的数" + Target + "不在该数组中!");
}
public static void main(String[] args) {
int[] nums = {1, 2, 3, 4, 5, 6, 7}; //定义查询数组
BinarySearch(nums, 0, nums.length - 1, 3); //参数依次为:查询数组,初始开始下标(都是从0开始),初始结束下标,查找目标值
}
}
总结
不积跬步,无以至千里!