线性查找算法与二分查找算法

注意需要确保数组数据有序性

1、线性查找
特点 已知遍历次数 逐次比较 数组 length;

int[] numArray={1,2,3,4,5,8,12,15,16,18,21,25,27};
 int target=12;
 int targetIndex=-1;
 for (int i = 0; i < numArray.length; i++) {
    if(numArray[i]==target){
               targetIndex=i;
               break;
    }
 }
 System.out.println(targetIndex);

2、二分查找

特点:遍历次数未知,即查到目标数值的次数未知, 所以,先不限制遍历次数 while(true),直到找到目标结束,并且每次遍历都从查找范围的中间位置查找

int[] numArray={1,2,3,4,5,8,12,15,16,18,21,25,27};
//搜索目标数值
int target=18;
//默认搜索范围位置
int begIndex=0;
int endIndex=numArray.length-1;
//两数相加除二 等于中间位置
int middleIndex=(begIndex+endIndex)/2;
while (true){
    //如果相等,则获取当前索引,并跳出循环
 if(numArray[middleIndex]==target){
        targetIndex=middleIndex;
        break;
    }else{
        //中间位置大于搜索目标,说明在其左侧,以中间索引为下次遍历范围的终点
 if(numArray[middleIndex]>target){
            endIndex=middleIndex;
        }
        //反之,说明搜索目标在其右侧,以中间索引为下次遍历范围的起点
 else{
            begIndex=middleIndex;
        }
        //重新计算中间位置
 middleIndex=(begIndex+endIndex)/2;
        //如果新计算的索引位置与开始遍历的索引一样,说明没有找到搜索目标
 //即两个相邻的数字相加 除以二(n1+n2)/2 所计算的整数 等于第一个数字 if(middleIndex==begIndex){
            break;
        }
    }
}
System.out.println(targetIndex);

你可能感兴趣的:(算法,二分查找)