欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java二分查找法—1

程序员文章站 2024-03-16 09:23:04
...

二分查找法的大O表示为O(log n) 也叫对数时间,将有序的数据一分为二。每次从满足条件的一部分去查找。简单查询来说非常节约时间。
注意:一定需要的是有序的数据

package Algorithm;

import java.util.Arrays;

public class BinarySearch {
	public static void main(String[] args) {
		int[] nums = { 2, 3, 5, 1, 7, 4, 9, 6 };
		Arrays.sort(nums);
		//1, 2, 3, 4, 5, 6, 7, 9
		int key=search(nums,4);
		System.out.println(key);
	}
	public static int search(int[] nums,int key){
		int low=0;//第一次次从最开位置开始始查询,以后每次循环这个值都有可能变换
		int middle=0;//二分查找的2,每次取中间值
		int high=nums.length-1;//第一次从数组最后开始查询开始,以后每次都有可能改变
		while(low<=high){//循环条件,当找到需要的值的时候结束循环
			middle=(low+high)/2;//找到中间位置。每次都会改变
			//第一次查找方式为//1, 2, 3, 4 |  5, 6, 7, 9 一分为2,左边部分为1-4 右边为5-9
			if(nums[middle]>key){//当中间值大于我们需要找的值的时候 例如我们输入3,中间值是4,大于我们需要朝着的向左边便宜
				high = middle - 1;//偏移中间值,为下一次做准备
			}else if(nums[middle]<key){
				low = middle + 1;
			}else{//找到了值
				return middle;
			}
		}
		return -1;//这里强行返回1,意思是我找不到你输入的key值
	}
}