顺序查找
顺序查找又称线性查找,是最基本的查找算法之一。其算法思想为:从表的一端开始,向另一端逐个进行记录的关键字和给定值kx的比较。若某个记录的关键字和给定值kx相等,则查找成功,并给出该记录在表中的位置。反之,若直至表中全部记录都已比较完毕,仍未找到与给定值kx相等的记录,则查找失败,给出失败信息(常以0表示)。
顺序存储结构的顺序查找算法:
#include <stdio.h>
#define N 10
/* 在顺序表p[n]中顺序查找关键字等于key的记录,查找成功,返回该
记录在表中的序号;失败,返回0*/
int s_search(int *p, int n, int key)
{
int i;
p[0] = key; /* 设置p[0]为监视哨 */
for (i = n; p[i]!=key; i--);
return i; /* 返回查找位置 */
}
int main()
{
int i, n, kx;
int R[N+1];
printf("\nThis is s_search...");
printf("\n\nPlease input the length of List(<=10):"); /* 输入查找表长度 */
scanf("%d", &n);
printf("\nPlease input the data of List:"); /* 输入n个记录关键字 */
for (i = 1; i <= n; i++)
scanf("%d", &R[i]);
printf("\nThe List is:"); /* 输出查找记录关键字序列 */
for (i = 1; i <= n; i++)
printf(" %d", R[i]);
printf("\n\nPlease input the key want to search:"); /* 输入待查找记录关键字 */
scanf("%d", &kx);
i = s_search(R, n, kx); /* 调用s_search() */
if ( i != 0 )
printf("\nFound! The key is No.%d\n", i);
else
printf("\nNot found!\n");
return 0;
}
查找成功:
查找失败:
优点:算法简单,对查找表的结构没有要求。
缺点:当n很大的时候,ASL(平均查找长度)较大,效率低。