package test;
import java.util.Arrays;
import java.util.Scanner;
/**
-
二分查找
-
通过用户输入的数组以及用户需要查询的数组值判断索引位置
-
*/
public class BinarySerach {public static int binarySearch(int arr[] ,int key) {
int start=0; int end=arr.length-1; while(start<=end) { //此行代码等价于 int mid=(start+end)/2 int mid=(start+end)>>>1; if(arr[mid]==key) { return mid; }else if(arr[mid]<key) { start=mid+1; }else { end=mid-1; } } return -1;
}
public static int [] sort(int [] arr) {Arrays.sort(arr); return arr;
}
public static void main(String[] args) {Scanner sc=new Scanner(System.in); System.out.println("请输入数组大小:"); int size=sc.nextInt(); int arr[]= new int[size]; System.out.println("请输入数组元素:"); for(int i=0;i<arr.length;i++) { int aa=sc.nextInt(); arr[i]=aa; } //由于二分查找需要有序数组 所以先对数组进行排序 int []arr1=sort(arr); for(int x:arr1) { System.out.print(x+" "); } System.out.println();//控制格式 System.out.println("请输入一个数组中的元素:"); int key=sc.nextInt(); int c= binarySearch(arr1,key); if(c!=-1) { System.out.println("元素值所在数组的索引位置为:"+c); }else { System.out.println("需要查询的元素不存在!"); }
}
}