算法作业3

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

解析:
方法一:二分查找法
将x和数组中间值T[m]比较,若相等则查找成功,如果不相等则看x大于还是小于T[m],缩小范围,直到查找到下标j,或查找结束,得出x不在数组中,返回j=0。

方法二:顺序查找法
从数组的第一个数开始按顺序查找,将每一个数与x相比,如果相等输出下标j,如果到结尾了还没找到,则输出j=0;

设计:

#include<stdio.h>
#include<math.h>
int findx_1(int a[],int n,int x){//顺序查找 
	for(int i=0;i<n;i++){
		if(a[i]==x)
		 return i;
	}
	return 0;
}

int findx_2(int a[],int n,int x){//二分查找 
	int head=1;
	int tail=n;
	int m;
	while(head<=tail){
		m=floor((head+tail)/2.0);
		if(x<a[m])
		 tail-=1;
		else if(x>a[m])
		 head+=1;
		else
		 return m;
	}
	return 0;
}

int main(){
	int a[100],n,x;
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		scanf("%d",&a[i]);
	}
	scanf("%d",&x);
	printf("%d\n",findx_2(a,n,x));
}

分析:
算法复杂度
方法1:二分查找:O(logn)
方法2:顺序查找:O(n)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值