注意需要确保数组数据有序性
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);
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。