二分查找的两种实现方法-【Java版】
二分查找,又叫折半查找。给定一个数据,查看该数据是否在给定的数组中,如果存在,就返回这个数据在数组中的下标位置,如果不存在,则返回-1g需要实现二分查找的前提是:待查找的数组是有序的。二分查找的思路:1:需要有个有序的数组2:需要一个待查询的数据3:先获取的数组的中间下标的值4:拿着中间值和待查询数据进行比较4.1:如果中间值小于待查数据,说明,待查找的数据在中间数据的右侧后半段(因为数组有序的,
二分查找(折半查找)要求待查数组有序,通过比较中间值与目标值不断收缩区间:中间值小于目标则起始位置右移一位,大于则结束位置左移一位,相等返回下标,找不到返回-1。Java实现有while循环和递归两种方案,优点是比较次数少查找快,适用于不常变动而查找频繁的有序列表。
- 二分查找前提是数组有序,比较次数少、查找速度快、平均性能好
- while方案用起始和结束双下标,循环条件为startIndex小于等于endIndex
- 递归方案传入最小最大下标,中间值偏大时结束下标减1,偏小时起始下标加1
- 缺点是要求有序表且插入删除困难,适合不经常变动而查找频繁的列表
二分查找,又叫折半查找。给定一个数据,查看该数据是否在给定的数组中,如果存在,就返回这个数据在数组中的下标位置,如果不存在,则返回-1
g需要实现二分查找的前提是:待查找的数组是有序的。
二分查找的思路:
1:需要有个有序的数组
2:需要一个待查询的数据
3:先获取的数组的中间下标的值
4:拿着中间值和待查询数据进行比较
4.1:如果中间值小于待查数据,说明,待查找的数据在中间数据的右侧后半段(因为数组有序的,折半后,右边数据大于左边数据),所以,查询的起始位置应该是中间位置+1
4.2:如果中间值大于待查数据,说明,待查数据在中间值的左侧后半段,所以,查找位置的结束点应该是中间值下标-1
4.3:如果中间值等于比较值的话,就直接返回中间值的下标
4.4:否则就返回-1
二分查找示意图:

根据以上思路,可以分为两种方案:一种是递归查询的,一种是while查询的。请看代码
一:使用while方案的:
/**
* 二分查找的真实方法
* @param array 待查数组
* @param compartDate 比较的数据
* @return 比较的数据的下标
*/
public static int biSearchWhileFunction(int [] array,int compartDate){
//起始位置
int startIndex = 0;
int endIndex = array.length-1;
//中间值的下标为止
int mIndex;
while(startIndex <= endIndex){
mIndex = (startIndex+endIndex)/2;
//如果中间值== 比较值。则中间值的下表+1
if(array[mIndex] == compartDate){
return mIndex ;
}else if(array[mIndex]<compartDa原创不易,完成人机校验,阅读全文
常见问题
二分查找算法的前提条件是什么?
待查找的数组必须是有序的。只有有序才能通过比较中间值判断目标在左半段还是右半段,从而每次把查找范围缩小一半,这也是折半查找名称的由来。
二分查找找不到目标时返回什么?
通常返回-1表示数组中不存在该数据。示例代码在区间越界、目标小于最小值或大于最大值时直接返回-1,测试方法根据-1输出未查询到的提示。