1. 基本查找
也叫做顺序查找
说明:顺序查找适合于存储结构为数组或者链表。
基本思想:顺序查找也称为线形查找,属于无序查找算法。从数据结构线的一端开始,顺序扫描,依次将遍历到的结点与要查找的值相比较,若相等则表示查找成功;若遍历结束仍没有找到相同的,表示查找失败。
package BasicSearc;
import java.util.ArrayList;
//基本查找/顺序查找
//核心:
//从0索引开始挨个往后查找
//需求:定义一个方法利用基本查找,查询某个元素是否存在,考虑重复的,并且把索引返回
//数据如下:{131, 127, 147, 81, 103, 23, 7, 79,81}
//比如找81.索引就是3 8
public class demo1 {
public static void main(String[] args) {
int[] arr = {131, 127, 147, 81, 103, 23, 7, 79, 81};
int num = 81;
ArrayList<Integer> findindex = findindex(arr, num);
for (int i = 0; i < findindex.size(); i++) {
System.out.print(findindex.get(i) + " ");
}
}
//心得:
//如果我们要返回多个数据的话,可以把这些数据存在数组或者集合里面
private static ArrayList<Integer> findindex(int[] arr, int num) {
ArrayList<Integer> list = new ArrayList<>();
for (int i = 0; i < arr.length; i++) {
if (arr[i] == num) {
list.add(i);
}
}
return list;
}
}
2. 二分查找
也叫做折半查找
说明:元素必须是有序的,从小到大,或者从大到小都是可以的。
如果是无序的,也可以先进行排序。但是排序之后,会改变原有数据的顺序,查找出来元素位置跟原来的元素可能是不一样的,所以排序之后再查找只能判断当前数据是否在容器当中,返回的索引无实际的意义。
基本思想:也称为是折半查找,属于有序查找算法。用给定值先与中间结点比较。比较完之后有三种情况:
-
相等
说明找到了
-
要查找的数据比中间节点小
说明要查找的数字在中间节点左边
-
要查找的数据比中间节点大
说明要查找的数字在中间节点右边
如图
比如查找79,计算出mid,发现mid比79大,说明右半边不看了,然后max=mid-1.如下图
在计算mid ,mid=23,发现23小于79,就不看左边了 然后min=mid+1,然后max和mid同时指向了79,