C语言II博客作业02
| 这个作业属于哪个课程 | https://edu.cnblogs.com/campus/zswxy/SE2020-3 |
|---|---|
| 这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/SE2020-3/homework/11822 |
| 这个作业的目标 | <学习和理解数组,排序算法> |
| 学号 | <20209161> |
2.1 完成PTA作业,并给出编程题完成截图

2.2 题目:快速寻找满足条件的两个数
1.根据三种解法给出相应的代码,并给出测试数据。
解法一:



| 数组元素 | 定值 | 结果 |
|---|---|---|
| 2 4 6 7 8 9 | 6 | 2 4 |
| 1 2 3 4 5 6 7 8 9 | 4 | 1 3 |
| 解法二: | ||
![]() |
||
![]() |
||
![]() |
||
| 数组元素 | 定值 | 结果 |
| ----------------- | --------------- | --------------- |
| 1 2 3 4 5 6 7 8 | 6 | 1 5 2 4 |
| 1 2 3 4 5 | 4 | 1 3 |
| 解法三: | ||
![]() |
| 数组元素 | 定值 | 结果 |
|---|---|---|
| 1 3 5 6 8 9 | 8 | 3 5 |
2.请说明三种算法的区别是什么?你还可以给出更好的算法吗?
穷举法:将数组中的数一个一个去尝试,直到找到结果。
二分法:将数组分为两组,从中间开始尝试,直到找到结果。
二分法的速度比穷举法快
2.3 请搜索有哪些排序算法,并用自己的理解对集中排序算法分别进行描述
1.冒泡排序:比较相邻的两个数,如果前者比后者大,则进行交换。每一轮排序结束,选出一个未排序中最大的数放到数组后面。
2.快速排序:选取一个基准元素,通常为数组最后一个元素(或者第一个元素)。从前向后遍历数组,当遇到小于基准元素的元素时,把它和左边第一个大于基准元素的元素进行交换。
3.希尔排序:在插入排序的基础上进行了改进,它的基本思路是先将整个数据序列分割成若干子序列分别进行直接插入排序,待整个序列中的记录基本有序时,再对全部数据进行依次直接插入排序
4.归并排序:归并排序严格遵循从左到右或从右到左的顺序合并子数据序列, 它不会改变相同数据之间的相对顺序, 因此归并排序是一种稳定的排序算法.
5.选择排序:在数组中选择一个最大或者最小的数排在前面,再从剩下的数中选择排在后面。
6.插入排序:它通过构建有序序列,对于未排序的数据序列,在已排序序列中从后向前扫描,找到相应的位置并插入。
7.堆排序:先把数组构造成一个大顶堆(父亲节点大于其子节点),然后把堆顶(数组最大值,数组第一个元素)和数组最后一个元素交换,这样就把最大值放到了数组最后边。
2.4 请给出本周学习总结
1 学习进度条
| 周/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的问题 |
|---|---|---|---|---|
| 1/3.1 | 3h | 111 | 文件的应用 | 文件的基础和应用不熟练 |
| 2/3.12 | 24h | 189 | 数组的应用 | 数组的排序算法不熟练 |
2 累积代码行和博客字数

3 学习内容总结和感悟

本周学习了数组,感觉自己还有很多不理解的地方,粗略的了解多种排序算法,都有各自的优点,我们应该寻找最好解决方法。
44 去了解冒泡排序,并用自己的话进行说明
比较相邻的两个数,如果前者比后者大,则进行交换。每一轮排序结束,选出一个未排序中最大的数放到数组后面。






浙公网安备 33010602011771号