#四大查找方法
java 中常用的查找的四种
- 1.顺序查找
- 2.二分查找
- 3.插值查找
- 4.斐波那契查找
1 顺序查找
/**
* 顺序查找
*
* @param arr
* @param value
* @return
*/
public static int seqSearch(int[] arr, int value) {
//找到返回下标,没找到返回 -1
for (int i = 0; i < arr.length; i++) {
if (arr[i] == value) {
return i;
}
}
return -1;
}
2 二分查找
1.二分查找 返回一个值
/**
* 二分查找
* 1.首先确定该数组的中间的下标
* mid = (left + right)/2
* 2.然后让查找的数据 findVal与arr[mid] 进行比较
* 2.1 findVal> arr[mid] 说明查找的数在右边,故在右边递归查找
* 2.2 findVal> arr[mid] 说明查找的数在左边,故在向左边递归查找
* 2.3 findVal == arr[mid] 说明找到了,直接返回
* <p>
* //递归说明时候结束
* 结束条件为
* 1) 找到了
* 2) 整个完整数组,都没有找到,结束条件为 left>right
*
* @param arr 查找的数组
* @param left 左边索引
* @param right 右边索引
* @param findVal 要查找的数
* @return
*/
public static int binarySearch(int[] arr, int left, int right, int findVal) {
//当left>right时,说明整个数组没有找想要的值
if (left > right) {
return -1;
}
int mid = (left + right) / 2;
int midVal = arr[mid];
if (findVal > midVal) {
return binarySearch(arr, mid + 1, right, findVal);
} else if (findVal < arr[mid]) {
return binarySearch(arr, left, mid - 1, findVal);
} else {
return mid;
}
}
2.二分查找所有值
//查找所有相同的值
public static List<Integer> binarySearchAll(int[] arr, int left, int right, int findVal) {
//当left>right时,说明整个数组没有找想要的值