查找算法
a. 线性查找:从数据中,第一个元素开始查找,将其与查找的值进行比对,如果相同,就停止查找,如果不相同,则继续下一个元素的比对。直到查找到匹配的值,或者是有数据遍历完毕,结束查询。用于数据无序、随机结构。
public class TestA{
public static void main(String[] args){
//查找数组中,值为100的索引的位置
int[] iarr = {45,32,67,99,87,66,88,100,54,98};
int count = 0;
//数组是无序。只能采用线性查找
for(int i = 0;i < iarr.length;i ++){
count ++;
System.out.println("查询次数:" + count );
//进行对比
if(iarr[i] == 100){
System.out.println("100在数组中的索引为:"+ i);
//一旦找到以后,不需要往下查找,结束循环
break;
}
}
}
}
b. 二分查找:前提:数据必须是有序的(升序、降序排列)。首先跟数据中中间位置的值进行比对。如果相同,结束查找,返回位置。如果中间值小于查找值,那么在后部分查找,如果中间值大于查找值,那么在前部分中查找, 在接下来部分中比较中间值, 直到查找到目标值或者无法在分为两部分。
public class TestB{
public static void main(String[] args){
sortTwo();
}
public static void sortTwo(){
int[] iarr = {23,34,54,55,66,68,88,99,102,120,180};
//查找值为120
int i = 120;
int findex = 0;//查找范围 开始索引
int lindex = iarr.length - 1;//查找范围 结束索引
int lindex = iarr.length - 1;//查找范围 结束索引
int mindex = -1;//查找范围中间索引
int index = -1;//查找到结果的索引
int count = 0;
//未知循环多少次,才能结束
while(findex <= lindex){
count ++;
mindex = (findex + lindex) / 2;//查找范围中间索引
System.out.println("findex:" + findex + ",lindex:" + lindex +
",mindex:" + mindex + ",count:" + count);
int temp = iarr[mindex];
if(temp == i){
index = mindex;
break; //找到结果就结束循环
}else if(temp < i){//在后部分查找
findex = mindex + 1;
}else if(temp > i){//在前部分查找
lindex = mindex -1;
}
}
if(index != -1){
System.out.println("索引位置为:" + index);
}else{
System.out.println("查找的值不存在数组中");
}
}
}