查找 —— 静态查找法(顺序查找法、折半查找法、分块查找法)

一、顺序查找法

算法思想:

依次与每个关键字逐个比较,如果与给定值相等,则查找成功,返回成功值;如果与所有关键字都不相等,则查找失败,返回失败值。其平均查找长度是 ( n + 1 ) / 2 (n+1)/2

实现:

int Search(int R[],int n,int k)	//	在长度为n的R[]中查找数值为k的元素
{
	int i;
	for(i=0;i<n;i++)
	{
		if(a[i]==k)
			return i;	//	查找成功返回i
	}
	return -1;	//	查找失败返回-1
}

二、折半查找法

前提:

折半查找又称二分查找,它要求线性表是有序的。

算法思想:

与处于查找表中间位置关键字比较,如果等于给定值,则查找成功,返回成功值;如果大于给定值,在表的左部折半法查找;如果小于给定值,在表的右部折半法查找;仅当左部或右部为空时候,查找失败,返回失败值。其平均查找长度是 l o g 2 ( n + 1 ) 1 log_2(n+1)-1

在这里插入图片描述
算法分析:
在这里插入图片描述
实现:

int Bsearch(int R[],int k,int low,int high)	//在R数组的low到high中查找关键字k
{
	int mid;
	while(low<=high)
	{
		mid=(low+high)/2;
		if(R[mid]==k)
			return mid;
		else if(k<R[mid])
			high=mid-1;
		else
			low=mid+1;
	}
	return -1;
}

分块查找法

算法思想:

利用关键字序列的分段(块)有序性,建立分段(块)索引表。借助分段索引表,实现快速查找。这种方法称为索引顺序表法。前一块中的最大关键字小于后一块中的最小关键字
,而块内的关键字不一定有序。其算法过程为

  1. 在分段索引表中“顺序”或“折半”查找给定值所在的块;
  2. 在(1)确定的块中,顺序查找给定值。

若使用“顺序”查找块,则其平均查找长度是 ( b + 1 ) / 2 + ( n / b + 1 ) / 2 (b+1)/2+(n/b+1)/2
若使用“折半”查找块,则其平均查找长度是 l o g 2 ( b + 1 ) 1 + ( n / b + 1 ) / 2 log_2(b+1)-1+(n/b+1)/2
在这里插入图片描述

算法分析:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/starter_____/article/details/93750328
今日推荐