算法设计与分析第三次作业(之前发过,但被屏蔽了)
Posted dingwenjing520
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法设计与分析第三次作业(之前发过,但被屏蔽了)相关的知识,希望对你有一定的参考价值。
实验报告
课程名称 |
《算法分析与设计》 |
实验日期 |
2021年 3 月 22 日至2021年 3月23日 |
||||
学生姓名 |
宣鉴超 |
所在班级 |
计算机194 |
学号 |
2019212212152 |
||
实验名称 |
两种检索算法 |
||||||
实验地点 |
勤园13-208 |
同组人员 |
宣鉴超 |
||||
1. 问题
写出两种检索算法:在一个排好序的数组T[1..n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中,输出j=0.按实验模板编写,“分析”部分仅给出复杂度结果即可。
2. 解析
一、顺序查找
顺序查找也称为线性查找,属于无序查找算法,适用于存储结构为顺序结构或链式存储的线性表。
从数据结构线性表的一端开始,顺序扫描,依次将扫描到的节点关键字与给定查找的x相比较,若相等则表示查找成功,若扫描结束仍没有找到与x相等的值则查找失败。
二、二分查找
二分查找也称折半查找,属于有序查找算法,适用于有序表。
选取顺序表的中间结点,将给定的x值与数列中间结点的关键字比较,若相等则查找成功;若不相等,判断x值与中间结点的大小,选取正确的一段再进行中间值的比较,直到查找到或表中没有与x值相等的中间结点。
3. 设计
//顺序查找:
for (i = 0; i < n; ++i) {
if (t[i] == key) {
cout << "查找成功!下标为:" << i+1 << endl;
break;
}
}
//二分查找:
left = 0; right = n - 1;
while ( left <= right) {
middle = (left+right) / 2;
if (key == t[middle]) {
cout << "查找成功!下标为:" << middle + 1 << endl;
break;
}
else if (key < t[middle])
right = middle - 1;
else
left = middle + 1;
}
4. 分析
顺序查找时间复杂度:O(n)
二分查找时间复杂度:O(log n)
5. 源码
https://github.com/dingwenjing520/-/blob/main/%E7%AE%97%E6%B3%95%E8%AE%BE%E8%AE%A1%E4%B8%8E%E5%88%86%E6%9E%90%E7%AC%AC%E4%B8%89%E6%AC%A1%E4%BD%9C%E4%B8%9A.cpp
以上是关于算法设计与分析第三次作业(之前发过,但被屏蔽了)的主要内容,如果未能解决你的问题,请参考以下文章