C语言II博客作业02

这个作业属于哪个课程 https://edu.cnblogs.com/campus/zswxy/SE2020-1
这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/SE2020-1/homework/11821
这个作业的目标 <学会在不同情况下运用不同数组>
学号 <20209086>

2.1 完成PTA作业,并给出编程题完成截图(5分)


7.1
7.2

2.2 题目:快速寻找满足条件的两个数

能否快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值,为了简化起见,我们假设这个数组中肯定存在至少一组符合要求的解。

1.根据三种解法给出相应的代码,并给出测试数据。(15分)

解法一:采用穷举法,从数组中任意取出两个数字,计算两者之和是否为给定的数字。

解法二:对数组中的每个数字arr[i]都判别Sum-arr[i]是否在数组中。

解法三:对数组进行排序,然后使用二分查找法针对arr[i]查找Sum-arr[i]。

2.请说明三种算法的区别是什么?你还可以给出更好的算法吗?(10分)

1.解法一是从数组中一个一个筛选出所需的数字,因为需要逐个筛选。
2.解法二是首先在数组找到确定所需的数字的和,再找到所需的数字,相比于解法一,两者的时间复杂度一样。
3.解法三是首先对数组进行排序,再用二分法进行查找,有规律的查找使运行时间相比于解法一和解法二更短,效率也更高,时间复杂度也减少了。
更好的算法:我觉得可以使用堆排序法或快速排序法,这两种排序法的时间复杂度和空间复杂度也更少,效率也更高。

2.3 请搜索有哪些排序算法,并用自己的理解对集中排序算法分别进行描述(5分)

1.冒泡排序:依次比较相邻的数据,即第一趟先比较第一个数和第二个数,较大数据放在后面,小数据放在前面,以此类推最大数据将逐步放到最后。
2.选择排序:简单直观的排序算法,先确定最大或最小元素作为排序的起始和末尾位置,然后再慢慢跟着这样来,直到排列完毕。
3.插入排序:通过构建有序序列,对于未排序的元素,在已排序序列中从后向前扫描,找到相应位置并插入。
4.希尔排序:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录"基本有序"时,再对全体记录进行依次直接插入排序。(也不是很懂!)
5.归并排序:将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。
6.快速排序:通过一趟排序将待排序元素记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。
7.基数排序:按照低位先排序,然后收集;再按照高位排序,然后再收集;依次类推,直到最高位。

2.4 请给出本周学习总结(15分)

1 学习进度条(5分)

周/日期 这周所花的时间 代码行数 学到的知识点简介 存在的不足
第一周3.1~3.7 10小时 461行 如何运用文件测试 文件运用生疏
第二周3.8~3.14 9小时 512行 数组的运用 数组的选择
2 累积代码行和博客字数(5分)

3 学习内容总结和感悟(5分)

对各种排序方法运用不是很熟练,还不知道在何总情况下运用那一种数组。
4 去了解冒泡排序,并用自己的话进行说明(5分)
冒泡排序:依次比较相邻的数据,即第一趟先比较第一个数和第二个数,较大数据放在后面,小数据放在前面,以此类推最大数据将逐步放到最后。

posted @ 2021-03-21 14:04  低头不称意  阅读(20)  评论(0编辑  收藏  举报