package binarySearch;
import java.util.Arrays;
public class 二分查找法 {
public static void main(String[] args) {
/*
* 思路:
* 1.首先直接调用sort工具进行快速排序
* 2.创建一个二分法方法进行查找
*/
int n = 8; //这里需要查询的目标值
int[] a = new int[] {9,3,6,4,1,3,5,8,15,27,0}; //待处理的数组
Arrays.sort(a); //调用工具直接快排
System.out.println(Arrays.toString(a)); //打印快速排列的数组
if(binarySearch(a,n)==-1) { //调用binarySearch方法查找,未找到返回-1
System.out.println("数组中没有找到"+n);
}
else { //找到返回下标
System.out.println("找到"+n+",它在数组中\n对应的数组下标值为:"+binarySearch(a,n));
}
}
private static int binarySearch(int[] a,int n) { //二分查找核心方法
/*
* 定义一个中间基准
* 如果查询值小于中间值,则继续在左边查找
* 如果查询值大于中间值,则继续在右边查找
* mid
* |
* [ 3, 4, 5, 6, 8, 9, 15, 27,33,45]
* | |
* start end
*/
int start = 0, end =a.length-1;
while(start<=end) { //硬性条件,如果左右端重合,不能再二分下去了
int mid = (start+end)/2; //取中间值
if(n<a[mid]) end = mid-1; //如果目标值小于中间值,则把范围缩小到从start到mid-1
else if(n>a[mid]) start = mid+1; //如果目标值小于中间值,则把范围缩小到从mid+1到end
else return mid; //既不大于,又不小于,肯定是等于。如果此条不走,会继续循环。
}
return -1; //直到start>end,整体循环结束,没有找到对应值,返回一个负数做判断
}
}
Java:有序数组二分法查找
最新推荐文章于 2022-10-07 23:41:47 发布