//二分查找,大数据量,有序,数组,内存连续,按中间分割,取值比对,割去一半, //复杂度:log对数(n/2k=1) //内存消耗:越来越少
public int search(int[] target, int value, int start, int end) { int mid = (end + start) >> 1; if (target[mid] == value) { return mid; } else if (target[mid] > value) { return search(target, value, start, mid); } else { return search(target, value, mid, end); } } public int search(int[] target, int value) {
int start = 0; int end = target.length-1; int mid = (end+start) >> 1; while(target[mid]!=value){ if(target[mid]<value){ start = mid; }else{ end = mid; } mid = (end+start) >> 1; } return mid; }
public static void main(String[] args) { int[] target = { 1,22,55,66,88,96,100,102,899, 1000,1001, 1002,1023,1056,1089,1099 }; System.out.println(new test().search(target, 1000)); System.out.println(new test().search(target, 1000,0,target.length-1)); }