二分法
输入为一列整数,在这一列整数当中找到另一个值。
public class BinarySearch {
public static int rank(int key , int[] a){
//数组必须是有序的
int start = 0;
int end = a.length-1;
while(start <= end){
int mid = start + (end - start) / 2;
if(key < a[mid]){
end = mid-1;
}else if(key > a[mid]){
start = mid + 1;
}else{
return mid;
}
}
return -1;
}
public static void main(String[] args) {
int[] array = new int[]{1,56,1,6,4,2,9,3,4,6};
Arrays.sort(array);
Arrays.stream(array).forEach(System.out::println);
int rank = rank(3, array);
System.out.println("rank: "+ rank);
}
}
整体思路就是将输入的一列整数排序后,取排序号整数列的中间值mid,将中间值mid与需要找到的值n进行比较,
如果mid>n,则将右边界移动到mid-1的位置。如果mid<n,就将左边界移动到mid+1的位置。循环此流程,直
到找到n。