C语言II博客作业02

一.作业头

| 这个作业属于哪个课程 | https://edu.cnblogs.com/campus/zswxy/CST2020-3 |
| ---- | ---- | ---- |
| 这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/CST2020-3/homework/11806 |
| 这个作业的目标 | <学会使用数组以及各种排序法,对数组的了解,学习数组> |
| 学号 | <20209019> |
一.本周教学内容&目标
第七章 数组 7.17.1 输出所有大于平均值的数

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

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

3.掌握选择排序法和二分查找法
二.本周作业(总分:50分)
2.1题目:快速寻找满足条件的两个数
能否快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值,为了简化起见,我们假设这个数组中肯定存在至少一组符合要求的解。

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

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

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

数据处理

输入数据 输出数据 说明
3 5 2 1 no
4 3 6 2 1 1 4 5 2 一组
解法二:
输入数据 输出数据 说明
---- ---- ----
1 5 7 0 1 7 一组
5 2 0 3 no

解法三:

输入数据 输出数据 说明
3 2 1 0 no
5 4 7 0 1 2 1 2 0 7 两组
请说明三种算法的区别是什么?你还可以给出更好的算法吗?(10分)
区别:第一种比较简单明了,前面两种的方法差不多属于差不多一个类型 一二中只是判断条件改变。
重点是第三种,运用二分法对半缩小搜索范围,很大程度上提高了运行效率。
2.3 请搜索有哪些排序算法,并用自己的理解对集中排序算法分别进行描述(5分)
1.冒泡排序:从第一个数开始,与后面的每一个数比较只要满足小于该数就进行交换,这样往复就能够让小的数慢慢冒泡到前面。
2.选择排序:首先在未排序的序列里找到最小(大)元素,放到序列的首端,再从剩余元素中找到最小(大)的元素,放到序列的尾端。依次循环,直到排序完成。
(找一大一小的数进行多次替换实现排序)
3.快速排序:将第n个数插到前面的有序数列中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序,是冒泡排序的一种的改进方法。
4.归并排序:采用分治法的一个非常典型的应用。
**2.4 请给出本周学习总结(15分)
学习进度条(5分)
日期 所发时间
---- ---- ----
第一周 3.2-3.4 5h
第二周 3.11-3.26 5h
3 .学习内容总结和感悟(5分)
数组的定义,初始化,利用数组编程,以及各种排序,他们的区别。
原文地址:https://www.cnblogs.com/Qudd/p/14589582.html