C语言II博客作业02

这个作业属于哪个课程 https://edu.cnblogs.com/campus/zswxy/CST2020-3
这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2020-3/homework/11806
这个作业的目标 <学习选择排序法和二分查找法>
学号 <20207760>

本周作业(50分)

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

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

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

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

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

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

解法一:


解法二:


解法三:


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

穷举法:枚举所有的可能,一个不漏,这个不要求排列有序

方法二:查找是在一定范围内寻找,找到就结束,不一定数据结束

二分法:通常一轮差不多可以去掉一半(也就是所谓的减治法),一般要求有序才可以排除一半

不能给出更好的算法了

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

冒泡排序:冒泡排序算法是把较小的元素往前调或者把较大的元素往后调。

选择排序:首先从第1个位置开始对全部元素进行选择,选出全部元素中最小的给该位置,再对第2个位置进行选择,在剩余元素中选择最小的给该位置即可;以此类推,重复进行。

插入排序:这种比较是从该有序序列的最末端开始执行,即要插入序列中的元素最先和有序序列中最大的元素比较,若其大于该最大元素,则可直接插入最大元素的后面即可,否则再次进行比较直至找到为止。

快速排序:通过一趟排序算法把所需要排序的序列的元素分割成两大块,其中,一部分的元素都要小于或等于另外一部分的序列元素,之后对划分后的序列元素再次进行排序。

归并排序:将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。

希尔排序:把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。

基数排序:它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用。

堆排序:利用堆这种数据结构所设计的一种排序算法。

记数排序:思路就相当于将数组最大值和最小值作差,将这个差值大小+1作为一个新数组的大小。

桶排序:是一个排序算法,工作的原理是将数组分到有限数量的桶子里。每个桶子再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。

2.3.2请自学冒泡排序并给出自己对代码的理解(5分)

冒泡排序算法是把较小的元素往前调或者把较大的元素往后调。这种方法主要是通过对相邻两个元素进行大小的比较,根据比较结果和算法规则对该二元素的位置进行交换,这样逐个依次进行比较和交换,就能达到排序目的。

2.4 本周学习总结

1 学习进度条

周/日期 这周所花的时间 代码行 学到的知识点
第1周
第2周
第3周
第4周 17h 86行 if语句、for循环、函数调用

2累积代码行和博客字数

时间 博客字数 代码行数
第1周 0 0
第2周 0 0
第3周 0 0
第4周 1200 86

3学习内容总结与感悟

感悟:学的迷迷糊糊,时时迷惑,要好好的去学。
posted @ 2021-03-25 20:21  是何时  阅读(31)  评论(0)    收藏  举报