查找算法之顺序查找

一、基本概念

        顺序查找(Sequential Search),又称线性查找。基本思路如下:给定一个目标值,而后从查找表的第一个记录数开始,将查找表中的记录数的关键字逐个与目标值比较,如果某个记录数的关键字与目标值相等,则表示查找成功;如果直至表中最后一个记录数的关键字与目标值都不相等,则表示查找失败。

        通俗讲,就是从头到尾,挨个比较,这个算法算得上是最简单的查找算法了。

二、实现思路

        我们先给定一个查找表,如下:

查找表

        我们设查找的目标值为17,流程如下:

        1、我们从查找表的第一个记录数19开始进行比较,19 != 17,指针右移。


        2、指针指向第二个记录数1,1 != 17,指针右移。



        以下省略一点点...........

        .

        .

        .    

        .    

        6、指针指向第6个记录数,17 == 17,相等,查找成功。


..

三、代码实现(C语言)

‘’‘

// 顺序查找

int Seq_Search(int *Arr , int Len , int Target)

{

    for(int i = 0 ; i <= Len ; i++)

    {

        if(Arr[i] == Target)

        {

            return i + 1;

        }

    }

    return -1;

}


int main()

{

        int Array[12] = { 19 ,1  , 23 , 45 , 32 , 17 , 6 , 98 , 72 , 58 , 44 , 61 };


        printf("查找表:");

        for(int i = 0 ; i < 12 ; i++)

        {

            printf("%d\t" , Array[i]);

        }

        // 查找数值17的位序

        int target = 17;

        int Pos = Seq_Search(Array , sizeof(Array) / sizeof(Array[0]) - 1 , target);

        if(target != -1)

        {

            printf("查找成功,数值%d的位序是:%d" , target , Pos);

        }

        else

        {

            printf("查找失败");

        }

        return 0;

}

四、效率分析

        在一个无序的,具有n个记录数的查找表中,我们很容易知道,在查找成功的情况下,成功找到某个记录数的比较次数就是该记录数的位序。在最好的情况下,即第一个记录数就是我们要查找的目标值,我们只需要比较一次,此时的时间复杂度为O(1);在最坏的情况下,即第n个记录数才是我们查找的目标值,那么我们就需要进行n次比较才可找到我们需要的目标值,此时的时间复杂度为O(n)。在一般的情况下,对于一个查找表,每个记录数被查找的概率都是一样的,此时的平均查找长度ASL为:

        那么,在查找失败的情况下,其查找长度皆为n + 1 , 即时间复杂度为O(n + 1)。

        通常,描述时间复杂度,我们都会将结果去掉常数项。所以,顺序查找的时间复杂度为O(n)。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容