这个作业属于哪个课程 | https://edu.cnblogs.com/campus/zswxy/SE2020-4 |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/SE2020-4/homework/11808 |
这个作业的目标 | 学会用数组进行数据处理;掌握用一维数组进行编程;学会运用选择排序法和二分查找法,了解其他排序算法 |
学号 | 20209217 |
一、本周教学内容&目标
第七章 数组 7.17.1 输出所有大于平均值的数
1.学生知道在哪种情况下可以使用构造数据类型—数组进行数据的处理
2.掌握用一维数组进行编程
3.掌握选择排序法和二分查找法
二、本周作业(总分:50分)
2.1 完成PTA作业,并给出编程题完成截图(5分)
编程题1:
编程题2:
2.2 题目:快速寻找满足条件的两个数
能否快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值,为了简化起见,我们假设这个数组中肯定存在至少一组符合要求的解。
①
解法一:采用穷举法,从数组中任意取出两个数字,计算两者之和是否为给定的数字。
测试数据:
数组元素个数 输入一个数 | 输入元素 | 输出结果 |
---|---|---|
5 7 | 1 3 5 2 4 | 3 4 |
7 8 | 2 3 4 2 5 3 3 2 4 2 3 4 | 3 5 |
6 9 | 1 2 3 5 2 3 1 3 2 4 | NOT FOUND |
解法二:对数组中的每个数字arr[i]都判别Sum-arr[i]是否在数组中。
测试数据:
数组元素个数 输入一个数 | 输入元素 | 输出结果 |
---|---|---|
4 8 | 2 4 1 6 7 3 4 | 2 6 |
8 25 | 2 3 5 13 42 24 12 20 4 2 5 | 5 20 |
6 2 | 1 4 3 5 2 3 5 2 4 6 | NOT FOUND |
解法三:对数组进行排序,然后使用二分查找法针对arr[i]查找Sum-arr[i]。
测试数据:
数组元素个数 输入一个数 | 输入元素 | 输出结果 |
---|---|---|
9 23 | 5 2 6 2 3 4 22 19 3 5 6 | 4 19 |
11 63 | 34 54 2 35 5 2 3 53 29 23 35 11 32 | 29 34 |
6 54 | 23 5 43 23 44 24 23 43 49 | NOT FOUND |
②
第一种算法写起来比较容易,但效率不高;
第二种算法是在一个无序数组里查找一个数,相对第一种只是思路变通了一下,效率也不是很高;
第三种算法是先排序再二分查找,直接对两个数字的和进行一个有序的遍历,可以将时间缩短,从而提高了效率。
除了以上算法,还可以先对数组进行排序,然后从i=0到n-1进行遍历,遍历arr[i]时,再调用函数找符合条件的两数即可。
要求:
1.根据三种解法给出相应的代码,并给出测试数据。(15分)
2.请说明三种算法的区别是什么?你还可以给出更好的算法吗?(10分)
2.3 请搜索有哪些排序算法,并用自己的理解对集中排序算法分别进行描述(5分)
①排序算法有:冒泡排序、快速排序、直接插入排序、希尔(shell)排序、直接选择排序、堆(Heap)排序、归并排序。
②冒泡排序:比较数组中前后两数的大小,将较大的排在后面;快速排序:选第一个或最后一个作为基准元素,然后从前向后遍历数组,小于基准元素的放其左侧,大于基准元素的则存为基准元素;直接插入排序:用一个临时变量储存当前值,当前面的元素比后面大时,先把后面的元素存入临时变量,前面元素的值放到后面元素的位置,再到最后把其值插入到合适的数组位置;希尔(shell)排序:设置一个最小增量dk,刚开始dk设置为n/2,进行插入排序,随后再让dk=dk/2,继续进行插入排序,直到dk为1时完成最后一次插入排序即可;直接选择排序:依次选出最小的数放到数组的前面,然后继续到剩下的数组重复这一做法,直到全部完成;堆(Heap)排序:先将数组构造成一个大顶堆,然后把堆顶(数组最大值)和数组最后一个元素交换,把剩余的第二大值放到堆顶,然后放到剩余未排序数组最后面,依次类推,直至数组排序完成;归并排序:应用递归把数组分解成一个个小数组,直到小数组的数位有序,再把有序的小数组两两合并成有序的大数组。
2.4 请给出本周学习总结(15分)
1 学习进度条(5分)
周/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的问题 |
---|---|---|---|---|
第一周 | 3天 | 112 | 编写测试程序,检测代码是否正确,计算运行时间 | 怎么使非常大的测试数据运算速度加快 |
第二周 | 4天 | 177 | 用一维数组编程,掌握选择排序法和二分查找法等排序算法 | 有些排序算法不太懂,如直接插入排序等 |
2 累积代码行和博客字数(5分)
3 学习内容总结和感悟(5分)
1、本周学习了数组,掌握用一维数组进行编程,在完成作业的过程中,学习了选择排序法和二分查找法,了解不同排序算法,;
2、PTA作业选择题第二题本来觉得蛮简单的,但还是做错了,重做时发现之前所算结果果然是错的,做错原因是之前没有看清就开始算;
3、这次PTA作业的编程题第二题花的时间较长,第一个测试点刚开始没拿到分,之后才发现原来是一些细节问题;
4、弄懂还不明白排序算法。做题时,再简单也得仔细!