经典算法1——顺序查找

​顺序查找是按照序列原有顺序对数组进行遍历比较查询的基本查找算法。

活动地址:CSDN21天学习挑战赛

顺序查找又称线性查找,主要用在线性表中进行查找,通常可分为对一般的无序线性表的顺序查找和对按关键字有序的顺序表的顺序查找。

算法思想:从头到尾挨个查找。

算法实现:顺序查找的基本思想是从线性表的一端开始,逐个检查关键字是否满足给定的条件。若查找到某个元素的关键字满足给定条件,则查找成功,返回该元素在线性表中的位置;若查询到达表的尽头也没有查询到符合条件的元素,则查找失败,返回-1或失败信息。

伪代码实现:

i = 1
while i <= A.length
    if A[i] == key
        return i
    i++
return -1

题目就用小山猪给的:a[]={11,34,20,10,12,35,41,32,43,14};

key=41;

C语言实现:

#include<stdio.h>
int main(){
        int a[10]={11,34,20,10,12,35,41,32,43,14};
        int key=41;

        for(int i=0;i<10;i++){
                if(a[i]==key){
                        printf("%d",i+1);
                        return 0;
                }

        }
        printf("-1");
        return 0;


}

结果为 7。

 C语言比较好实现,思路简单,算法便捷。

再看看Java实现:

public class shunxu {
    public static void main(String[] args) {
        int[] a={11,34,20,10,12,35,41,32,43,14};
        int key=41;

        int result=search(a,key);//调用算法
        System.out.println(result);
    }
    public static int search(int[]a,int key){
        int i=0;
        while(i<a.length){
            if(a[i]==key){
                return i+1;
            }i++;
        }
        return -1;
    }
}

结果为 7。

Java实现比较C语言,我个人觉得相对复杂一点点,但是也很简单。

时间复杂度:O(n)

最慢查找完整个表为O(n),最快第一个就是key时O(1)。

空间复杂度:O(1)

不改变原有的线性表。

 

顺序查找是经典算法的基础算法之一,对后期的学习具有很大的影响,对于编程人员来说是基本操作。

顺序查找是在一个已知无序队列中找出与给定关键字相同的数的具体位置。原理是让关键字与队列中的数从第一个开始逐个比较,直到找出与给定关键字相同的数或者搜索完整个数据列为止。定义一个数组a[10]接收数据列、一个变量x接收要查找的数和一个函数search)用来执行查找的过程,最后输出要查找的数在数组中的位置n。

顺序查找的存储结果要求:顺序查找算法既适用于线性表的顺序存储结构,也适用于线性表的链式存储结构,但使用单链表作为存储结构时,扫描必须从第一个结点开始。

顺序查找的优点:算法简单且对表的结构无任何要求。无论是用向量还是用链表来存放结点,而且不管结点之间是否有序,它都同样适用。

顺序查找的缺点:查找效率低。因此,当数据量较大时不宜采用顺序查找。

使用顺序查找算法查找数据,最理想的情况是比较一次 就能够找到目标数据,最差的情况;是需要比较完所有的(n个) 数据后才能找到目标数据,平均比较次数为n/2次。

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值