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值
}
}