顺序查找
优点:算法简单;
缺点:效率低。执行的复杂度O(n)
案例1:线性查找
定义数组: int[] arr1 = new int[]{34,54,3,2,65,7,34,5, 76,34, 67};
查找元素5是否在上述数组中出现过I如果出现,输出对应的索引值。
public class LinearSearchTest {
public static void main(String[] args) {
int[] arr1 = new int[]{34,54,3,2,65,7,34,5, 76,34, 67};
boolean flag=true;
for (int i = 0; i < arr1.length-1; i++) {
if(arr1[i]==45){
System.out.println("此数组有45这个元素,其索引值为:"+i);
flag=false;
break;
}
}
if(flag){
System.out.println("此数组没有45这个元素");
}
}
}
二分法查找:数组元素必须有序才能使用
优点:效率高。执行的复杂度O(logn);
缺点:算法相对线性复杂。
案例2:二分法查找
定义数组: int[] arr2 = new int[]{2, 4,5,8,12,15,19,26,37, 49,51,66, 89, 100};
查找元素5是否在上述数组中出现过?如果出现,输出对应的索引值。
public class BinarySearchTest {
public static void main(String[] args) {
int[] arr2 = new int[]{2, 4, 5, 8, 12, 15, 19, 26, 37, 49, 51, 66, 89, 100};
// 定义目标元素值
int target = 0;
// 定义标记:判断是否找到了元素
boolean isFlag = true;
// 定义首尾索引
int head = 0;
int end = arr2.length - 1;
while (head <= end) {
int mid = (head + end) / 2;
if (arr2[mid] < target) {
head = mid + 1;
} else if (arr2[mid] > target) {
end = mid - 1;
} else {
System.out.println("此目标元素" + target + "的索引值是" + mid);
isFlag = false;
break;
}
}
if (isFlag) {
System.out.println("没有此目标元素");
}
}
}