C语言II博客作业02

这个作业属于哪个课程 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、弄懂还不明白排序算法。做题时,再简单也得仔细!

原文地址:https://www.cnblogs.com/zhge/p/14520298.html