二分搜索技术(从排好序的n个元素(由小到大排序)中寻找一个中寻找元素x的坐标)
输入举例(即给十个数,找里面的31的坐标):
10 321
1 1 2 3 5 7 12 31 111 321
输出举例
7
package section2.BinarySearch;
import java.util.Scanner;
public class BinarySearch {
public static void main(String[] args) {
Scanner cin =new Scanner(System.in);
int total = cin.nextInt(); //数据个数
int num = cin.nextInt(); //要找的数据
int[] array = new int[total];
for (int i = 0; i < array.length; i++) {
array[i]=cin.nextInt();
}
System.out.println(find(total,num,array));
}
public static int find(int total, int num, int[] arr){
int left = 0; int right =total-1;
while(left<=right){
int middle = (left+right)/2; //每次查找都缩小一半范围
if(arr[middle]==num){ //找到
return middle;
}else if(arr[middle]>num){
right = middle-1; //注意-1 避免(8+9)/=8这样的死循环
}else{
left=middle+1; //注意+1 避免(8+9)/=8这样的死循环
}
}
return -1; //没找到
}
}