实践报告任选一题进行分析。内容包括:
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不到点,就是还没有很好地掌握这一知识点。