算法刷题

二分查找的两种实现方法-【Java版】

二分查找,又叫折半查找。给定一个数据,查看该数据是否在给定的数组中,如果存在,就返回这个数据在数组中的下标位置,如果不存在,则返回-1g需要实现二分查找的前提是:待查找的数组是有序的。二分查找的思路:1:需要有个有序的数组2:需要一个待查询的数据3:先获取的数组的中间下标的值4:拿着中间值和待查询数据进行比较4.1:如果中间值小于待查数据,说明,待查找的数据在中间数据的右侧后半段(因为数组有序的,

二分查找,又叫折半查找。给定一个数据,查看该数据是否在给定的数组中,如果存在,就返回这个数据在数组中的下标位置,如果不存在,则返回-1

g需要实现二分查找的前提是:待查找的数组是有序的。

二分查找的思路:

1:需要有个有序的数组

2:需要一个待查询的数据

3:先获取的数组的中间下标的值

4:拿着中间值和待查询数据进行比较

4.1:如果中间值小于待查数据,说明,待查找的数据在中间数据的右侧后半段(因为数组有序的,折半后,右边数据大于左边数据),所以,查询的起始位置应该是中间位置+1

4.2:如果中间值大于待查数据,说明,待查数据在中间值的左侧后半段,所以,查找位置的结束点应该是中间值下标-1

4.3:如果中间值等于比较值的话,就直接返回中间值的下标

4.4:否则就返回-1

二分查找示意图:

f4697605980734dfb71fa1086931153b.png

根据以上思路,可以分为两种方案:一种是递归查询的,一种是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

原创不易,完成人机校验,阅读全文

相关推荐