二分查找:
它的前提是线性表中的记录必须是有序,线性表必须采用顺序存储。
基本思想:
在有序表中,取中间记录作为比较对象,若给定值与中间记录的关键字相等,则查找成功;若给定值小于中间记录的关键字,则在中间记录的左半区继续查找;若给定值大于中间记录的关键字,则在中间记录的右半区继续查找。不断重复上述过程,直到查找成功,或所有查找区域无记录,查找失败为止。
class BinarySearch {
public static void main(String[] argv){
int[] arr = {1,16,24,35,47,59,62,73,88,99};
int key = 62; //待查找元素
int index = search(arr,key);
System.out.println(index);
}
/*二分查找*/
public static int search(int[] arr,int key){
int low,high,mid;
//定义最低下标为记录首位
low = 0;
//定义最高下标为记录末位
high = arr.length-1;
while(low<=high){
//折半
mid = (low+high)/2;
if(key>arr[mid]){
//若查找值比中值小,最高值调整到中位下标小一位
low = mid+1;
}else if (key
//若查找值比中值大,最小值调整到中位下标大一位
high = mid-1;
}else{
//若相等则说明mid即为查找到的位置
return mid;
}
}
return 0;
}
}
二分查找相当于是把静态有序查找表分成两颗子树,即查找结果只需要找其中的一半数据记录即可,等于工作量少了一半,然后继续折半查找,效率当然是非常高了。
最好的情况:1
最坏的情况:log2(3)+1
最终二分查找算法的时间复杂度为O(logn)