二分查找
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列.[1]
实现代码:
public class BinarySearch_demo1 {
public static void main(String[] args) {
int[] a = {1,4,5,12,34,44,55};
// 循环
System.out.println(rank(a,44));
// 递归
System.out.println(rank2(a,0,a.length-1,44));
}
// 循环实现
public static int rank(int[] a , int key){
int lo = 0;
int lg = a.length -1;
while (lo <= lg){
int mid = lo+(lg-lo)/2;
if (key < a[mid]){
lg = mid -1;
}else if(key > a[mid]){
lo = mid +1;
}else{
return mid;
}
}
return -1;
}
// 递归实现
public static int rank2(int[] a, int lo,int lg,int key){
if (lo>lg) return -1;
int mid = lo+(lg-lo)/2;
if (key < a[mid]) {
return rank2(a,lo,mid -1,key);
}else if(key>a[mid]){
return rank2(a,mid+1,lg,key);
}else {
return mid;
}
}
}