一个简单的二分查找算法:
import java.util.Arrays;
public class BinarySearch {public static int rank(int key,int[] a){int lo=0;int hi=a.length-1;while (lo<=hi){int mid=lo+(hi-lo)/2;if (key<a[mid])hi=mid-1;else if (key>a[mid])lo=mid+1;else return mid;}return -1;}public static void main(String[] args){int[] whilelist={84,48,36,12,14,74,35,93};Arrays.sort(whilelist);
// System.out.println(whilelist);int[] sc={84,48,36,100,123};System.out.println(sc.length);for (int i=0;i<sc.length;i=i+1){int key=sc[i];if (rank(key, whilelist) < 0)System.out.println(key);}}
}
简单描述:算法由静态方法rank()实现,它接受一个整数键和一个有序的int数组作为参数,如果整数存在于数组,返回它的索引,否则返回-1,算法使用两个变量lo和hi,并保证整数如果存在于数组中则它一定存在于a[lo...hi]中,然后通过循环不断查找,每次查找如果没有查找到就将查找范围缩小一半。
二分查找法之所以快是因为它只需要查找很少几个条目就能找到目标元素。