查找定义: 根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录)。
知识分享:热门博客
1、顺序查找
说明:顺序查找适合于存储结构为顺序存储或链接存储的线性表。
基本思想: 顺序查找也称为线形查找,属于无序查找算法。从数据结构线形表的一端开始,顺序扫描,依次将扫描到的结点关键字与给定值k相比较,若相等则表示查找成功;若扫描结束仍没有找到关键字等于k的结点,表示查找失败。
复杂度分析:
查找成功时的平均查找长度为:(假设每个数据元素的概率相等) ASL = 1/n(1+2+3+…+n) = (n+1)/2 ;
当查找不成功时,需要n+1次比较,时间复杂度为O(n);
所以,顺序查找的时间复杂度为O(n)。
1-1实现代码
- Java实现方式一:
public static int search1(int[] a,int key) {
for(int i=0,length=a.length;i<length;i++) {
if(a[i]==key) {
return i; //找到返回下标
}
}
return -1; //未找到
}
- Java实现方式二:
public static int search2(int[] a,int key) {
int index=a.length-1;
if(key==a[index])
return index;
a[index]=key;
int i=0;
while(a[i++]!=key);
return i==index+1?-1:i-1;
}
1-2测试
int arr[]= {1,2,3,4,5,6,7,8,9,10};
int result1=search1(arr,6);
System.out.println("result1 = "+result1);
int result2=search2(arr,6);
System.out.println("result2 = "+result2);
- 输出结果:
1-3方法解析
方式一: 无论是有序的还是无序的都可以,也不需要排序,只需要一个个对比即可,但其实效率低。
方式二: 如果找到就返回查找的数所在数组中的下标,如果没有找到就返回-1.还有方式一的实现可以优化,使用一个哨兵,免去了每次都要越界的判断,但通过实际测试运行效率并没有提高,无论测试的数据是多还是少运行的时间都差不多。
下篇博文:查找算法02-二分法查找