C语言II—作业02
这个作业属于哪个课程 | 计科三班 |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/CST2020-3/homework/11806 |
这个作业的目标 | 学习和理解数组,排序算法 |
学号 | 20209015 |
2.1 完成PTA作业,并给出编程题完成截图
2.2 题目:快速寻找满足条件的两个数
1.根据三种解法给出相应的代码,并给出测试数据。
解法1
解法2
解法3
2.请说明三种算法的区别是什么?你还可以给出更好的算法吗?
穷举法:将数组中的数一个一个去尝试,直到找到结果。
二分法:将数组分为两组,从中间开始尝试,直到找到结果。
二分法的速度比穷举法快
2.3 请搜索有哪些排序算法,并用自己的理解对集中排序算法分别进行描述
1.冒泡排序:比较相邻的两个数,如果前者比后者大,则进行交换。每一轮排序结束,选出一个未排序中最大的数放到数组后面。
2.快速排序:选取一个基准元素,通常为数组最后一个元素(或者第一个元素)。从前向后遍历数组,当遇到小于基准元素的元素时,把它和左边第一个大于基准元素的元素进行交换。
3.希尔排序:在插入排序的基础上进行了改进,它的基本思路是先将整个数据序列分割成若干子序列分别进行直接插入排序,待整个序列中的记录基本有序时,再对全部数据进行依次直接插入排序
4.归并排序:归并排序严格遵循从左到右或从右到左的顺序合并子数据序列, 它不会改变相同数据之间的相对顺序, 因此归并排序是一种稳定的排序算法.
5.选择排序:在数组中选择一个最大或者最小的数排在前面,再从剩下的数中选择排在后面。
6.插入排序:它通过构建有序序列,对于未排序的数据序列,在已排序序列中从后向前扫描,找到相应的位置并插入。
7.堆排序:先把数组构造成一个大顶堆(父亲节点大于其子节点),然后把堆顶(数组最大值,数组第一个元素)和数组最后一个元素交换,这样就把最大值放到了数组最后边。
2.4 请给出本周学习总结
1.学习进度条
周/日期 | 这周所花时间 | 代码行 | 学到的知识点简介 | 目前比较困惑的问题 |
---|---|---|---|---|
2/3.9-3.13 | 12h | 203 | 一些简单的查找运算方法 | 什么情况下该运用哪种查找运算法比较好,现在不是很清楚! |
2.累积代码行和博客字数(5分)
3.学习内容总结和感悟(5分)
3.1 学习内容总结
3.2学习体会
2.感觉还是对各种排序方法运用不是很熟练,比如什么时候该用哪种排序方法更省力就搞不清楚了,希望老师下次课能讲讲。
3.通过网上查找资料时发现又多好多不知道的东西,比如时间复杂度、空间复杂度等等,好难啊!