目录
常用的查找有:
顺序(线性)查找,二分查找/折半查找、插值查找、斐波那契查找
一、线性查找
判断数列中是否包含此名称。
代码实现:
public static int seqSearch(int[] arr, int values) {
//逐一比对,发现现有相同的值时返回下标
for (int i = 0; i < arr.length; i++) {
if (values == arr[i]) {
return i; //找到一个就返回,若一个数组中有多个等于value的值,则使用集合,将下标存入集合中
}
}
return -1;
}
二、二分查找
在有序数组(从大到小、从小到大)中进行二分查找
1.思路分析
(有序数组为从小到大)
1)首先确定该数组的中间下标【(left + right)/ 2】
2)然后让需要查找的数findVal和arr[mid]比较,
a.findVal > arr[mid],说明要查找的数在mid的右边,因此需要递归来向右重复这些步骤来查找
b.findVal < arr[mid],说明要查找的数在mid的左边,因此需要递归来向左重复这些步骤来查找
c.findVal = arr[mid],说明找到,则返回
结束递归:
1)找到需要查找的数则退出
2)递归完所有数组,仍然没有找到findVal,则退出,即【left > right】
2.代码实现
1)基本代码 (只找到一个)
package com.xx.search;
public class BinarySearch {
public static void main(String[] args) {
int[] arr = {1,2,5,8,11,45,56,98,101}; //有序数组
int i = binarySerch(arr, 0, 7, arr.length-1);
if(i == -1){
System.out.println("没有找到该数!");