###一、顺序查找的概念 顺序查找(Sequential Search)是最简单的一种查找方法。其基本思想是:从线性表的一端开始,依次将每个记录的关键字与给定值进行比较,若某个记录的关键字等于给定值,表示查找成功,返回记录序号;若将线性表中所有记录都比较完,仍未找到关键字与给定值相等的记录,则表示查找失败,返回一个查找失败的标志值
###二、顺序查找的实现 ####顺序查找
/**
*简单的顺序查找
* */
int SeqSearch(int s[], int n, int key)
{
int i;
for (i=0; i<n && s[i]!=key; i++) //循环查找关键字
; // 空循环
if (i<n) //查找成功,返回序号
return i;
else //查找失败,返回失败值
return -1;
}
####顺序查找测试
#include <stdio.h>
#include "SeqSearch.c"
#define ARRAYLEN 8
int main()
{
int key, i, pos;
int source[ARRAYLEN] = {69, 65, 90, 37, 92, 6, 2};
printf("请输入查找关键字:");
scanf("%d", &key);
pos = SeqSearch(source, ARRAYLEN, key);
printf("原数据:");
for (i=0; i< ARRAYLEN; i++)
printf("%d ", source[i]);
printf("\n");
if (pos > 0)
printf("查找成功,关键字%d位于数组的第%d个位置\n", key, pos);
else
printf("查找成功,关键字%d不在数组中\n", key);
}
###三、顺序查找简单优化 在以上的SeqSearch函数中,第7~8行是顺序查找的主要部分,在这部分循环语句中,每循环一次 都需要进行两个比较(i<n和r[i]!=key),如果静态查找表中的数据很多,两次比较则需要进行较长时间,程序的效率会显著降低。这时,可对SeqSearch算法进行改进,在创建静态查找表时,在该表的末端增加一个空的单元,用来保存查找的关键字。这样,确保静态查找表中有一个与查找关键字相同的数据,就不需要使用条件i<n进行判断了。每次查找时,查找表中总是能找到关键字,怎样判断是否查找成功呢?其实,只需要判断,若是找了n+1个元素才找到关键值,则表示查找失败
####SeqSearch函数优化
int SeqSearch(int s[], int n, int key)
{
int i;
for (i=0; s[i]!=key; i++) //循环查找关键字
; // 空循环
if (i<n) //查找成功,返回序号
return i;
else //查找失败,返回失败值
return -1;
}
####SeqSearch函数优化后测试
#include <stdio.h>
#include "SeqSearch.c"
#define ARRAYLEN 8
int main()
{
int key, i, pos;
int source[ARRAYLEN+1] = {69, 65, 90, 37, 92, 6, 2};
printf("请输入查找关键字:");
scanf("%d", &key);
source[ARRAYLEN+1] = key;
pos = SeqSearch1(source, ARRAYLEN+1, key);
printf("原数据:");
for (i=0; i< ARRAYLEN; i++)
printf("%d ", source[i]);
printf("\n");
if (pos >= 0)
printf("查找成功,关键字%d位于数组的第%d个位置\n", key, pos);
else
printf("查找失败,关键字%d不在数组中\n", key);
}
###四、顺序查找的特点 优点:对静态查找表中数据的顺序没有要求。若需要创建动态查找表,可以方便地将查找不成功的数据添加到查找表的末尾。 缺点:速度慢,在最坏的情况下,查找成功需要进行n次比较,查找失败需要进行n+1次比较。