C语言II博客作业02
1.作业头
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/zswxy/SE2020-1 |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/SE2020-1/homework/11821 |
这个作业的目标 | 掌握用一维数组进行编程,了解选择排序算法和二分查找法 |
学号 | 20209087 |
二、本周作业(总分:50分) | |
2.1 完成PTA作业,并给出编程题完成截图(5分) |
2.2 题目:快速寻找满足条件的两个数
能否快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值,为了简化起见,我们假设这个数组中肯定存在至少一组符合要求的解。
要求:
1.根据三种解法给出相应的代码,并给出测试数据。(15分)
解法一:采用穷举法,从数组中任意取出两个数字,计算两者之和是否为给定的数字。
解法二:对数组中的每个数字arr[i]都判别Sum-arr[i]是否在数组中。
解法三:对数组进行排序,然后使用二分查找法针对arr[i]查找Sum-arr[i]。
2.请说明三种算法的区别是什么?你还可以给出更好的算法吗?(10分)
穷举法是枚举所有的可能,一个不漏,这个不要求排列有序
第二个就是假设给定的和为Sum。一个变通的思路,就是对数组中的
每个数字arr[i]都判别Sum-arr[i]是否在数组中,这样,就变通成为一个查找的算法:
二分法通常一轮差不多可以去掉一半(也就是所谓的减治法),一般要求有序才可以排除一半.
2.3 请搜索有哪些排序算法,并用自己的理解对集中排序算法分别进行描述(5分)
1、插入排序(直接插入排序、折半插入排序、希尔排序);
插入排序是将无序序列中的各元素依次插入到已经有序的线性表中。
2、交换排序(起泡排序、快速排序);
交换排序是借助数据元素之间的互相交换进行排序的一种方法。
3、交换排序(直接选择排序、堆排序);
交换排序是每一趟从待排序的数据元素中选出最小(或最大)的一个元素,
顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。
4、归并排序;
归并排序是多次将两个或两个以上的有序表合并成一个新的有序表。
最简单的归并是直接将两个有序的子表合并成一个有序的表。
5、基数排序;
基数排序是它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中
,藉以达到排序的作用,基数排序法是属于稳定性的排序,
2.4 请给出本周学习总结(15分)
1 学习进度条(5分)
周/日期 | 这周所花的时间 | 代码行 | 学到的知识简介 | 目前比较困惑的地方 |
---|---|---|---|---|
第一周/3.4 | 4h | 200 | 文件数据的读写和处理 | mode的取值,计算代码运算时间 |
第二周/3.11 | 5h | 300 | 掌握用一维数组进行编程,了解选择排序算法和二分查找法 | 返回scanf的值,二分查找法 |
2 累积代码行和博客字数(5分) | ||||
3 学习内容总结和感悟(5分)
总结和感悟
(1)多阅读优秀代码,学习优秀之处,学习思路思维,多模仿,快速成长!
(2)对于现在的我来说每一次作业都是挑战,需要花较长的时间去完成,
特别是在写题遇到困难的时候,真的恼火,但是在编译成功的那一刻也是真的快乐!
(3)自己的课后拓展很重要,能够不断加深和获取对这门功课的理解和多样化的知识点!
去了解冒泡排序,并用自己的话进行说明:
冒泡排序
1、从头依次访问数组每个元素,进行相邻或间的邻元素之间的交换
2、元素之间两两交换,把小的换到前面,大的放到后面。
3、所有元素交换完成后,一趟交换完成,此时最大的元素会到数组尾部。
4、反复执行以上步骤,直到所有元素都排序完。