二分搜索又称折半搜索,具有比较次数少、搜索速度快、平均性能好的优点; 缺点是核对表规则,插入删除困难。 因此,混叠搜索方法适于在不频繁改变的情况下搜索频繁有序列表。 首先,假设表中元素按升序排列,将表中间记录的关键字与检索关键字进行比较,两者相等时,检索成功; 否则,使用中间位置记录将表分为前、后两个子表。 如果中间位置记录的关键字大于搜索关键字,则进一步搜索前面的子表。 否则,进一步搜索以下子表: 重复上述过程,直到找到满足条件的记录,并且搜索成功或子表不存在。 此时搜索不会成功。
一、概念
二分搜索算法又称折半搜索,是一种在有序数组中搜索特定元素的搜索算法。
二、算法思想
搜索过程从数组的中间元素开始,如果中间元素是要搜索的元素,搜索过程将结束。 如果特定元素大于或小于中间元素,则按大于或小于中间元素的一半搜索数组,并像第一次一样从中间元素进行比较。 如果步长数组为空,则表示找不到。 该检索算法在每次比较时将检索范围缩小一半。
三.优缺点
二分搜索算法的优点是比较次数少、搜索速度快、平均性能好; 缺点是核对表规则,插入删除困难。 因此,二分搜索算法适合于不频繁变动地搜索频繁有序列表。
代码实现:
//*
*二分搜索算法
*
* @param srcArray规则数组
* @查找* @param key元素
* @未找到返回-1的* @return key数组下标
*/
公共类二进制搜索{
publicstaticvoidmain (字符串[ ] args ) {
int [ ] srcarray={ 3,5,11,17,21,23,28,30,32,50,64,78,81,95,101 };
System.out.println ('递归实现: ' Binsearch(Srcarray,0,srcarray.length-1,94 ) );
system.out.println('while循环实现: ' Binsearch(Srcarray,65 );
}
//二分搜索常规周期的实现
隐私保护binsearch (int [ ] srcarray,int key ) {
int mid=srcArray.length/2;
if(key==srcarray[mid]({
返回mid;
}
int start=0;
int end=srcArray.length-1;
wile (开始=结束) {
mid=(开始)/2;
if (密钥)
end=mid-1;
}elseif(keysrcarray[mid] ) )。
开始=mid 1;
}else{
返回mid;
}
}
返回- 1;
}
//二分搜索递归实现
私密性staticintbinsearch (int [ ] srcarray,int start,int end,int key ) {
int mid=(开始)/2;
if(key==srcarray[mid]({
返回mid;
}
if (开始=结束) {
返回- 1;
}elseif(keysrcarray[mid] ) )。
返回二进制搜索(srcarray,mid 1,end,key );
(elseif )密钥
返回二进制搜索(srcarray,start,mid-1,key );
}
返回- 1;
}
}