二分法: 一般用数组存数据 而且该数组还是有序的 如果用链表存的话 那么访问每一个元素是O(n)的这样效率很低 数组可以实现O(1)的访问 下面看一下实现: public class Bin { public int binarySearch(int []a,int low,int high,int value){ int middle = (low+high)/2; if(a[middle]==value){ int tem = findNextValue(a, middle,value); return tem; } if(a[middle]>value){ if(middle==0){ return -1; } return binarySearch(a, low,middle-1, value); }else{ if(middle==(a.length-1)){ return -1; } return binarySearch(a, middle+1, high, value); } } public int findNextValue(int []a,int middle,int value){ int tem; for(int i=middle;i<a.length;i++){ if(a[i]!=value){ return --i; } } return a.length-1; } public static void main(String[] args) { int []a={1,3,5,7,12,16,16,16,16,19}; Bin bin = new Bin(); int e = bin.binarySearch(a, 0, a.length-1, 1); if(e<0){ System.out.println("cannot find the value"); }else{ System.out.println("find the value in:"+e); } } }