实验三

1.问题
(1)阅读主定理的证明过程。
(2)写出两种检索算法:在一个排好序的数组T[1…n]中查找x,如果x在T中,输出x在
T的下标j;如果x不在T中,输出j=0.按实验模板编写,“分析”部分仅给出复杂度
结果即可。
2.解析

顺序查找:从线性表的一端开始,逐个检查关键字是否满足给定的条件。若查找到某个元素的关键字满足给定条件,则查找成功,返回该元素在线性表中的位置;若已经查找到表的另一端,还没有查找到符合给定条件的元素,则返回查找失败的信息。

二分查找:二分查找要求所查找的顺序表必须是有序的,其思想非常简单。定义left为顺序表最左端元素位置,right为顺序表右端元素位置。定义mid = (left + right) / 2,即顺序表的中间位置,然后用所查找的值与mid所在位置处的值比较,由于列表有序,若所查找的值比mid小,则只需在表的前半部分查找,否则只需在表的后半部分查找(若第一次比较就发现两值相等则直接返回当前值所在的位置),以此类推,直至查找到所寻找的值或确定所查找的值不在该列表内为止(即查找失败)
3.设计
1、顺序查找

int Sequential(int *a,int n,int key)
{
	int i;
	for (i=0;i<n;i++)
	{
		if (a[i]==key)
		return i;
	}
	return 0;
}

2、二分查找

int Binary(int a[], int length, int key)
{
	int low = 1;
	int high = length;
	int mid;
	while (low <= high)
	{
		mid = (low + high) / 2;   
		if (key < a[mid])
			high = mid - 1;     
		else if (key > a[mid])
			low = mid + 1;    
			return mid;      
	}
	return -1;
}

4.源码

https://github.com/land555/algorithm-analy-sis/blob/main/week3-BinarySearch.cpp

https://github.com/land555/algorithm-analy-sis/blob/main/week3-SequentialSearch.cpp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值