算法分析实验三

学生林泓佺在《算法分析与设计》课程中介绍了两种检索算法:直接查询和二分查找。直接法时间复杂度为O(n),而二分查找在有序数组中达到O(log2n)。报告提供了C++实现并分析了两者的时间效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验报告

课程名称 《算法分析与设计》 实验日期 2020年 3 月 22 日 至 2020 年 3 月 22 日
学生姓名 林泓佺 所在班级 计算机193 学号 20019212212088
实验名称 数组查询
实验地点 勤园13号楼208 同组人员 林泓佺

1.问题
[写出两种检索算法:在一个排好序的数组T[1…n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中,输出j=0]
2.解析

[
直接查询:从数组最前端开始查找,直到找到该数字为止,返回下标,若寻找不到,返回0;
二分查询:定义左边界与右边界,每次查询区间内中间的数,若找到则返回下标,若查询的位置比该数小,则左边界为中间值加1,否则有边界为中间值减1,直到左边界大于等于右边界为止,若查找不到,返回0;
]
3.设计
[#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
int a[maxn];
int n;
//直接查询
int check(int num[],int x) {
for(int i=1; i<=n; i++) {
if(num[i]==x)return i;
}
return 0;
}
//二分查找
int scheck(int num[],int x) {
int l=1,r=n;
while(l<r) {
int mid=(l+r)/2;
if(num[mid]==x)return mid;
else if(num[mid]<x) l=mid+1;
else r=mid-1;
}
if(num[l]!=x)l=0;
return l;
}
int main() {
int k;
cout<<“请输入数组长度:”<<endl;
cin>>n;
cout<<“请输入数组:”<<endl;
for(int i=1; i<=n; i++) {
cin>>a[i];
}
cout<<“请输入要查询的数字:”<<endl;
cin>>k;
cout<<"直接查询数组下标为: ";
cout<<check(a,k)<<endl;
cout<<"二分查询数组下标为: ";
cout<<scheck(a,k);
}
]
4.分析
[直接查询算法复杂度:O(n)
二分查找算法复杂度:O(log2n)]
5.源码
[github源码地址:https://github.com/lhqbalabala/3.22]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值