折半查找
二分查找也叫折半查找,复杂度O(log2N),因指数的增长曲线相比指数增长还是比较趋缓,因此在大数据的查询中,折半查找的效率是比较高的
思想
将目标元素和有序数组的中间元素值进行比较,如果小于中间元素,那么继续在中间元素和前一趟最小值元素之间的中间元素进行比较,依次循环找到最终匹配元素位置,相反如果目标元素大于中间值,那么目标元素将要前一趟的中间元素和最大值元素之间的中间元素继续比较,依次循环比较得到最终匹配元素配置
核心代码
int array[] = {0,1,2,3,4,5,6,7,8,9};
int lowerIndex = 0;
int upperIndex = array.length - 1;
int curIndex = 0;
int searchKey = 3;
while(true){
curIndex = (lowerIndex + upperIndex)/2;
if(array[curIndex] == searchKey){
break;
//lowerIndex == upperIndex:目标元素刚好数组的边界元素
}else if(lowerIndex > upperIndex){
curIndex = -1; //表示未找到目标元素
break;
}else{
//向中间值靠拢:重新设置比较元素集合的最大和最小区间
if(array[curIndex] > searchKey){
upperIndex = curIndex - 1;
}else{
lowerIndex = curIndex + 1;
}
}
}