C语言II博客作业02

1.作业头
| 这个作业属于哪个课程 | https://edu.cnblogs.com/campus/zswxy/CST2020-3/homework/11806 |
| ---- | ---- | ---- |
| 这个作业要求 | 学会进行数据处理 |
| 这个作业目标 | 掌握选择排序法和二分查找法 |
| 学号 | 20209023 |
一,本周教学内容&目标
第七章 数组,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 请搜索有哪些排序算法,并用自己的理解对集中排序算法分别进行描述,请自学冒泡排序并给自己对代码的理解;
八大排序算法。冒泡排序算法,快速排序,直接插入排序,希尔排序,简单选择排序,堆排序,归并排序和基数排序。
冒泡排序算法:每次相邻两个数比较,若升序,则将大的数放到后面,一次循环过后,就会将最大的数放在最后。
选择排序算法:从第一个数开始,每次和后面剩余的数进行比较,若升序,则如果后边的数比当前数字小,进行交换,和后面的所有的数比较,交换后,
就会将当前的最小值放在当前的位置。
插入排序:用扑克的方法解释,首先我们抽到第一张牌,将它放在第一位,我们排序是从第二次抽牌开始,第二次抽起一张牌3,它比9小,所有将9后后移一位
然后把3放在9原来的位置,再次抽牌2,发现它应该在3的前面,所有将3和9向后移,把2放到3原来的位置.....
希尔排序:第一个突破0的排序算法,是简单插入排序的改进版,它与插入排序的不同之处在于,它会优先比较距离较远的元素。
归并排序:是将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序合并,得到完全有序的序列。
快速排序:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续排序,已达
到整个序列有序。
2.4 请给出本周学习总结。
1.学习进度条
| 周 日期 | 第二周8~29 |
| ---- | ---- | ---- |
| 这周花费时间 | 9小时 |
| 学到知识简介| 了解文件 |
| 目前疑惑问题 | 选择排序 |
2.累积代码行和博客字数

3.学习内容
本周学习的是数组,通过八大算法,学会从大到小或者从小到大进行排序。

posted on 2021-03-26 19:26  烦应  阅读(35)  评论(0编辑  收藏  举报

导航