C语言II—作业02

1.作业头

这个作业属于哪个课程 https://edu.cnblogs.com/campus/zswxy/SE2020-3
这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/SE2020-3/homework/11822
这个作业的目标 <使我们了解并掌握一维数组,并且自行去了解排序算法>
学号 <20209179>
一、本周教学内容&目标

第七章 数组 7.17.1 输出所有大于平均值的数

1.学生知道在哪种情况下可以使用构造数据类型—数组进行数据的处理

2.掌握用一维数组进行编程

3.掌握选择排序法和二分查找法

二、本周作业

2.1 PTA作业

第一题:

第二题:

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

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

解法一:

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

测试结果:

解法二:

对数组中的每个数字arr[i]都判别Sum-arr[i]是否在数组中。
代码截图:

测试结果:

解法三:

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


测试结果:

要求:

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

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

答:1,第一种用穷举法写的时候代码和思路都很简单,但是执行的次数会增加,导致计算机计算时间变长。
2,第二种跟第一种差别不是很大,只是判断的条件不同。
3,第三种采用了二分查找法,这种方法的原理是用那个数和中间的一个数进行比较,然后缩小范围查找,这样和前两种方法的区别是能大大减少计算机计算的时间,提高效率

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

答:排序算法一共有10种,分别是选择排序,冒泡排序,插入排序,希尔排序,快速排序,归并排序,基数排序,计数排序,堆排序和桶排序。
1,选择排序:用第1个数跟第2个第3个数一次比较,使最小的数排到第1个位置,然后再用第二个数跟第三个数第四个数比较,使第2小的数排到第2个位置,以此类推。
2,冒泡排序:用第一个数跟第二个数比较,再用第二个数跟第三个数比较,依次比较下去,最后就会排好序。
3,插入排序:从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。
4,希尔排序:把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。
5,快速排序:在区间中随机挑选一个元素作基准,将小于基准的元素放在基准之前,大于基准的元素放在基准之后,再分别对小数区与大数区进行排序。
6,归并排序:把数据分为两段,从两段中逐个选最小的元素移入新数据段的末尾。可从上到下或从下到上进行。
7,基数排序:将椅子数组的个位数看作标志,在遍历数组时,将对应的标志放入到0~9编号的桶中,这个桶我们用二维数组来表示。
比如35,它的个位数是5,那么就放入bucket[5][]的桶中,以此类推。
8,计数排序:将数组最大值和最小值作差,将这个差值大小+1作为一个新数组的大小,比如说一个序列7,5,7,8,4。最大和最小差为4,那么创建一个大小为5的数组b,那么b[0]对应的就是序列中最小值的个数,b[1]对应的就是序列中最小值+1的个数,b[2]对应的就是序列中最小值+2的个数··· ··· 最后根据b数组重新对原序列赋值。
9,堆排序:利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。
10,桶排序:将数组分到有限数量的桶子里。每个桶子再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。

2.4 请给出本周学习总结

1 学习进度条

周/日期 这周所花时间 代码行 学到的知识点简介 目前比较迷惑的地方
1/2021.3.1 -3.5 7h 94 文件以及计算时间差的方法 对于计算时间差的代码,有些地方还不理解
2/2021.3.9 -3.19 48h 398 学到了一维数组以及一些简单的排序算法 对一些排序算法的原理不太理解

2 累积代码行和博客字数

3 学习内容总结和感悟

总结:对于二分查找法有三个情况,当查找的数小于中间值时,当查找的数大于中间值时,当查找的数等于中间值时,这些是二分查找法的核心部分。在了解排序算法后,发现有几种基础的排序算法,其他的排序算法都是基于基础的算法衍生的,所以只要把基础的算法了解透了就解决了大部分问题。
感受:这次的博客作业的解法三有点难,二分查找法虽然能快速地查找,但思路比较难,代码实现也比较难,经过多次修改后终于达成了理想的效果。

posted @ 2021-03-16 22:56  韦蕊  阅读(71)  评论(1编辑  收藏  举报