基本查找
package cn.adminlog.search;
public class A01_BasicSearchDemo1 {
public static void main(String[] args) {
// 基本查找/顺序查找
// 核心: 从0索引开始挨个往后查找
// 需求:定义一个方法利用基本查找,查询某个元素是否存在
// 数据如下:{131, 127, 147, 81, 103, 23, 7, 79}
int[] arr = {131, 127, 147, 81, 103, 23, 7, 79};
int number = 82;
System.out.println(BasicSear(arr, number));
}
// 参数:数组、要查找的元素
// 返回值:表示当权元素是否存在
public static boolean BasicSear(int[] arr, int number) {
// 利用基本查找来查找number在数组中是否存在
for (int i = 0; i < arr.length; i++) {
if (arr[i] == number) {
return true;
}
}
return false;
}
}
- 查找索引
package cn.adminlog.search;
import java.util.ArrayList;
public class A01_BasicSearchDemo2 {
public static void main(String[] args) {
// 课堂练习:
// 需求: 定义一个方法利用基本查找,查询某个元素在数组中的索引
int[] arr = {131, 127, 147, 81, 103, 23, 7, 79, 81};
int number = 81;
System.out.println(BasicSear(arr, number));
ArrayList basicSearList = BasicSearList(arr, number);
System.out.println(basicSearList);
for (int i = 0; i < basicSearList.size(); i++) {
System.out.println(basicSearList.get(i));
}
}
public static int BasicSear(int[] arr, int number) {
// 利用基本查找来查找number在数组中是否存在
for (int i = 0; i < arr.length; i++) {
if (arr[i] == number) {
return i;
}
}
return -1;
}
public static ArrayList BasicSearList(int[] arr, int number) {
// 利用基本查找来查找number在数组中是否存在
ArrayList list = new ArrayList<>();
for (int i = 0; i < arr.length; i++) {
if (arr[i] == number) {
list.add(i);
}
}
return list;
}
}
二分查找/折半查找
package cn.adminlog.search;
public class A02_BinarySearchDemo1 {
public static void main(String[] args) {
// 二分查找/折半查找
// 核心: 每次排除一般的查找范围
// 需求:定义一个方法利用二分查找,查询某个元素在数组中的索引
// 数据如下:{7, 23, 79, 81, 103, 127, 131, 147}
int[] arr = {7, 23, 79, 81, 103, 127, 131, 147};
System.out.println(binarySear(arr, 7));
}
public static int binarySear(int[] arr, int number) {
// 1. 定义两个变量,记录要查找的范围
int min = 0;
int max = arr.length - 1;
// 2. 利用循环会不断的去找要查找的数据
while (true) {
if (min > max) {
return -1;
}
// 3. 找到min和max的中间位置
int mid = (min + max) / 2;
// 4. 拿着mid指向的元素跟要朝朝的元素进行比较
if (arr[mid] > number) {
// 4.1 number在mid的左边
// min不变,max = mid - 1;
max = mid - 1;
} else if (arr[mid] < number) {
// 4.2 number在mid的右边
min = min + 1;
}else{
// 4.3 number跟mid指向的元素一样
return mid;
}
}
}
}



