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("查找的值不存在數組中");
}
}
?
}
?