第二章 实践报告 心得

时间:2021-08-18 16:40:47

实践报告任选一题进行分析。内容包括:

1. 实践题目

2. 问题描述

3. 算法描述

4. 算法时间及空间复杂度分析(要有分析过程)

5. 心得体会(对本次实践收获及疑惑进行总结)

 

1,实践题目:

7-1 二分查找 (20 分)

输入n值(1<=n<=1000)、n 个非降序排列的整数以及要查找的数x,使用二分查找算法查找x,输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。

输入格式:

输入共三行: 第一行是n值; 第二行是n 个整数; 第三行是x值。

输出格式:

输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。

输入样例:

4

1 2 3 4

1

输出样例:

0

2

 

2,问题描述:

要求设置一个数组长度为n的数组,输入数组,对它进行排序,用二分查找某一数值x,查找成功则输出其所在位置及比较次数,否则输出-1及比较次数;

n的范围、输入格式及输出格式都有要求:0<=n<=1000;第一行输入要先输入的数值是n、第二行是输入整个数组中的n 个数值,用空格隔开、第三行是要查询的数值x;查找成功则输出其所在位置及比较次数,否则输出-1及比较次数,用空格隔开或换行都行。

 

3.算法描述:

     首先定义了一个变量 num 和数组nums[1000],然后输入num的值,即决定了数组nums中会有num个元素,然后一个for循环输入数组的num个元素;调用递归版的快速排序的函数对数组nums进行排序,然后输入所要查找的数值x,调用二分查找的函数进行查找,查找成功则输出其所在位置及比较次数,否则输出-1及比较次数,最后把要求要输出的数值输出,注意输出、输入格式以及num的输入范围。把功能实现分成几个函数,会使主函数不那么冗长。

 

4算法时间及空间复杂度分析(要有分析过程):

对于数组nums的输入的时间复杂度是O(n),空间复杂度为O(1);

对于快速排序的时间复杂度是O(nlogn),最不好的时候空间复杂度为O(n);

对于二分查找的时间复杂度是O(logn),空间复杂度为O(1)

    所以算法的时间复杂度为T(n)=O(nlogn),空间复杂度为O(n)

 

5心得体会(对本次实践收获及疑惑进行总结):

   这次上机的时候由于感觉时间很急迫,对于不熟悉的算法更加一脸茫然,但也收获了来自队员的给力,参与了一定的谈论和对于快速排序的更加的熟悉。

   在下课之前我们还讨论了第二题的做法,回来之后我也在dev c++上实现过,但总感觉有点怪怪的。

   还有就是其实对于复杂度感觉要自己弄的时候总是get不到点,就是还没有很好地掌握这一知识点。