一、顺序查找
顺序查找是按照序列原有顺序对数组进行遍历、比较的基本查找算法。
package io.github.wangpeng;
public class SequentialSearch {
public static void main(String[] args) {
int[] arr = {131, 127, 98, 78, 65, 45, 108, 6};
int number = 78;
System.out.println(sequentialSearch(arr, number));
}
public static boolean sequentialSearch(int[] arr, int number) {
for (int i = 0; i < arr.length; i++) {
if (arr[i] == number) {
return true;
}
}
return false;
}
}
二、二分查找
- 前提条件:数组中的数据必须是有序的
- 核心逻辑:每次排除掉一半的查找范围
- min和max表示当前要查找的范围
- mid是在min和max中间的
- 如果要查找的元素在mid的左边,缩小范围时,min不变,max等于mid减1
- 如果要查找的元素在mid的右边,缩小范围时,max不变,min等于mid加1
package io.github.wangpeng;
public class BinarySearch {
public static void main(String[] args) {
int[] arr = {6, 45, 65, 78, 98, 108, 131, 127};
int number = 6;
System.out.println(binarySearch(arr, number));
}
public static int binarySearch(int[] arr, int number) {
int min = 0;
int max = arr.length - 1;
while (true) {
// 没找到 返回-1
if (min > max) {
return -1;
}
int mid = (min + max) / 2;
if (arr[mid] > number) {
max = mid - 1;
}
else if (arr[mid] < number) {
min = mid + 1;
}
else {
return mid;
}
}
}
}