查找——顺序查找

###1、顺序查找的概念 顺序查找(Sequential Search)是最简单的一种查找方法。其基本思想是:从线性表的一端开始,依次将每一个记录的关键字与给定值进行比较,若某个记录的关键字等于给定值,表示查找成功,返回记录序号;若将线性表中全部记录都比较完,仍未找到关键字与给定值相等的记录,则表示查找失败,返回一个查找失败的标志值算法

###2、顺序查找的实现 ####顺序查找数组

/**
 *简单的顺序查找
 * */
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);
}

###3、顺序查找简单优化 在以上的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函数优化后测试code

#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);
}

###4、顺序查找的特色 优势:对静态查找表中数据的顺序没有要求。若须要建立动态查找表,能够方便地将查找不成功的数据添加到查找表的末尾。 缺点:速度慢,在最坏的状况下,查找成功须要进行n次比较,查找失败须要进行n+1次比较。io

相关文章
相关标签/搜索