简介
二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;缺点是要求待查表为有序表,且插入删除困难,因此,折半查找适合元素不经常变动而查找频繁的有序列表。
算法实现步骤
首先,假设要查找的数组是升序排列,将数组中间位置的元素与查找目标相比较,如果相等,则表示从数组中找到该目标元素,直接返回;否则以中间位置元素为分界点,分为前后两个序列,如果目标元素比中间位置元素小,则再从前一个序列中去寻找目标元素;如果目标元素比中间位置元素大,则从后一个序列中寻找目标元素。直到从数组中查询到目标元素或发现目标元素不在数组中为止。
二分查找递归方式实现
public int halfSearch(int[] arr,int left,int right,int target){
int mid = (left+right)/2;
int midValue = arr[mid];
if(left<=right){
if(target<midValue){
return halfSearch(arr,left,mid-1,target);
}else if(target>midValue){
return halfSearch(arr,mid+1,right,target);
}else{
return midValue;
}
return -1;
}
}
二分查找非递归方式实现
public int halfSearch(int[] arr,int target){
int left = 0;
int right = arr.length-1;
while(left<=right){
int mid = (left+right)/2;
int midValue = arr[mid];
if(target<midValue){
right = mid-1;
}else if(target>midValue){
left = mid+1;
}else{
return midValue;
}
}
return -1;
}