一、基本概念
顺序查找(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)。