一、基本思路
顺序查找是按照序列原有顺序对数组进行遍历比较查询的基本查找算法。
基本思路: 就是依次遍历所给序列,如果存在元素与要查找的元素相同就返回该元素下标。
简单来说: 就是从头到位一个一个的遍历序列,如果存在要查找的元素就记录返回其下标。
二、算法分析
时间: 因为需要从头到尾遍历待查找序列,所以顺序查找的平均时间复杂度为O(n)。
空间: 顺序查找在查找过程中不需要额外开辟空间,所以空间复杂度为O(1)。
算法 | 平均时间 | 最好情形 | 最差情形 | 空间复杂度 | 备注 |
---|---|---|---|---|---|
顺序查找 | O(n) | O(n) | O(n) | O(1) | 待查表是有序表或无序表都可以进行 |
三、代码实现
这里利用顺序查找给出了两个方法,一个是仅仅查找序列中是否存在指定元素,一个是将序列中所以满足条件的元素的下标都进行返回。
import java.util.ArrayList;
import java.util.List;
/**
* 顺序查找
* @author dankejun
* @create 2020-05-03 10:59
*/
public class SeqSearch {
public static void main(String[] args) {
int arr[] = {1, 9, 11, -1, 34,11, 89};
// int search = seqSearch1(arr, 11);
System.out.println("序列中是否含有元素:" + seqSearch(arr,11));
System.out.println("序列中指定元素的下标:" + seqSearch1(arr, 11));
}
/**
* 查找数组中满足条件的值
* @param arr
* @param value
* @return 如果找到就返回true,否则就返回false
*/
public static boolean seqSearch(int[] arr, int value) {
for (int i = 0; i < arr.length; i++) {
if (value == arr[i]) {
return true;
}
}
return false;
}
/**
* 查找数组中所有满足条件的值
* @param arr
* @param value
* @return 查找数组中所有满足条件的值的下标集合
*/
public static List<Integer> seqSearch1(int[] arr, int value) {
List<Integer> list = new ArrayList<>();
for (int i = 0; i < arr.length; i++) {
if (value == arr[i]) {
list.add(i);
}
}
return list;
}
}
测试序列: int arr[] = {1, 9, 11, -1, 34,11, 89};查找是否含有元素11
测试结果: