携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第14天,点击查看活动详情
顺序查找
顺序查找又称线性查找,主要用于在线性表中进行查找。顺序查找通常分为对一般的无序线性表的顺序查找和对按关键字有序的顺序表的顺序查找。
顺序查找的基本思想
其基本思想是从线性表的一端开始,逐个检查关键字是否满足给定的条件。若查找到某个元素的关键字满足给定条件,则查找成功,返回该元素在线性表中的位置;若已经查找到表的另一端,但还没有查找到符合给定条件的元素,则返回查找失败的信息。
代码实现
public class SequentialSearch {
public static void main(String[] args) {
int[] array = {4, 8, 9, 3, 100, 99, 22, 23, 77, 23};
int target = 23;
int i = sequentialSearch(array, target);
System.out.println("目标元素的数组下标为:" + i);
}
// 顺序查找(for循环)
public static int sequentialSearch(int[] array, int target) {
for (int i = 0; i < array.length; i++) {
if (array[i] == target) {
System.out.println("目标元素:" + target + ",所在的数组下标为:" + i);
return i;
}
}
System.out.println("没有查找到该目标元素");
return -1;
}
//顺序查找(foreach)
public static int sequentialSearch2(int[] array, int target) {
for (int element : array) {
if (element == target) {
System.out.println("目标元素:" + target + ",所在的数组下标为:" + element);
return element;
}
}
System.out.println("没有查找到该目标元素");
return -1;
}
}
优缺点分析
优点:算法简单,对表结构无任何要求,既适用于顺序结构,也适用于链式结构。
缺点:平均查找次数较多,查找效率低,所以当n很大时,不建议使用顺序查找
时间复杂度分析
使用顺序查找在含有 n 个数据的序列中查找目标值,最理想的状态是目标值位于序列第一位,只需比较一次就找到目标值,此时的时间复杂度为O(1);而最差的情况就是需要比较 n 次,也就是比较完序列中所有的数据,才找到目标值或者说不存在目标值,此时的时间复杂度为O(n)。
查找失败时,需要比较 n + 1 次, 时间复杂度我们都会将结果去掉常数项,所以该算法的时间复杂度为O(n)