import java.util.Arrays;
import java.util.Scanner;
/**
* 通过二分法查找数据
* 二分法的思路是将目标数组从中间分开,分成高低两个部分,通过比较中间值与目标值得大小,来判断目标值再高区还是低区,并将该区作为新的目标区。
* 二分法的目标数组必须是有序的。
* */
public class BinarySearch {
public static void main(String[] args) {
int[] x = {45,465,4654,635,42,1,4,265,56,52,631,364,654,64,684,61,641,65,153410,2513};
Arrays.sort(x); //二分法需要有序
System.out.println("排序后的数组:"+Arrays.toString(x));
Scanner s = new Scanner(System.in);
int input = -1;
do{
System.out.println("请输入要查找的数字,输入0退出程序:");
input = s.nextInt();
System.out.println("搜索"+input+"的位置为:"+binarySearch(input, x));
}while(input != 0);
}
/**二分法搜索的通用方案*/
public static int binarySearch(int key,int[] content){
int head = 0; //该值用来表示目标数组的第一个元素,初始值为0,即整个数组的第一个元素。
int end = content.length - 1; //该值用来表示目标数组的最后一个元素,初始值为数组最后一个元素的index
//如果head与end相等,甚至head超过end,则表示数组已经查询完毕
while(head <= end){
int middle = head + (end - head)/2; //计算中间值,即高区和低区的分解值
if(content[middle] == key){ //找到了目标key
return middle;
}else if(content[middle] > key){ //目标值比中间值小,目标在低区
end = middle -1; //用新值当做目标数组的最后一个元素
}else { //目标值比中间值大,目标在高区
head = middle + 1; //用新值当做目标数组的第一个元素
}
}
return -1; //如果循环走完了还没有执行return,则说明没有找到
}
}
文章标题
最新推荐文章于 2022-05-12 11:32:07 发布