算法设计与分析第三次作业(之前发过,但被屏蔽了)

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

以上是关于算法设计与分析第三次作业(之前发过,但被屏蔽了)的主要内容,如果未能解决你的问题,请参考以下文章

算法设计 第三次作业

OOP第三次总结

《对不队》第三次作业—团队项目的原型设计与开发

第三次作业

OO第三单元总结

第三次作业