基本查找
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; } } } }