C语言Ⅱ博客作业02
这个作业属于哪个课程 | 2020计算机3班 |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/CST2020-3/homework/11806 |
这个作业的目标 | 学会用数组完成对数据的处理 |
学号 | 20209011 |
二,本周作业
2.1 完成PTA作业,并给出编程题完成截图
1.年龄与疾病
2.选择排序法
2.2 题目:快速寻找满足条件的两个数
能否快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值,为了简化起见,我们假设这个数组中肯定存在至少一组符合要求的解。
解法一:采用穷举法,从数组中任意取出两个数字,计算两者之和是否为给定的数字。
解法二:对数组中的每个数字arr[i]都判别Sum-arr[i]是否在数组中。
解法三:对数组进行排序,然后使用二分查找法针对arr[i]查找Sum-arr
要求:
1.根据三种解法给出相应的代码,并给出测试数据。(15分)
第一种
第二种
第三种
2.请说明三种算法的区别是什么?你还可以给出更好的算法吗?(10分)
解法一使用了多个for循环,一个一个查找;解法二和解法一相似,但是比第一种解法简单;解法三使用了二分查找法。
更好的算法还没有思考出。
2.3 请搜索有哪些排序算法,并用自己的理解对集中排序算法分别进行描述
排序算法一共有10种,分别是选择排序,冒泡排序,插入排序,希尔排序,快速排序,归并排序,基数排序,计数排序,堆排序和桶排序
|排序算法 |描述 |
|---|---|---|
|冒泡排序 | 用第一个数跟第二个数比较,再用第二个数跟第三个数比较,依次比较下去,最后就会排好序。 |
|选择排序 |用第1个数跟第2个第3个数一次比较,使最小的数排到第1个位置,然后再用第二个数跟第三个数第四个数比较,使第2小的数排到第2个位置,以此类推。 |
|插入排序| 从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间|
| 希尔排序|把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。 |
|快速排序|在区间中随机挑选一个元素作基准,将小于基准的元素放在基准之前,大于基准的元素放在基准之后,再分别对小数区与大数区进行排序 |
|归并排序|把数据分为两段,从两段中逐个选最小的元素移入新数据段的末尾。可从上到下或从下到上进行。 |
|基数排序|将椅子数组的个位数看作标志,在遍历数组时,将对应的标志放入到0~9编号的桶中,这个桶我们用二维数组来表示。 |
|计数排序|将数组最大值和最小值作差,将这个差值大小+1作为一个新数组的大小 |
|堆排序|利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。 |
|桶排序 |将数组分到有限数量的桶子里。每个桶子再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。 |
2.4 请给出本周学习总结
1 学习进度条(5分)
周/日期 | 这周所花的时间 | 代码行 | 学的知识点简介 | 目前比较迷惑的内容 |
---|---|---|---|---|
3/1——3/7 | 6h | 70 | 从文件中读取数据并进行数据处理 | 文件的读取 |
3/8——3/14 | 5h | 80 | 用数组进行数据处理 | 数据处理 |
2 累积代码行和博客字数(5分)
3 学习内容
1.新学习的算法有着一定的难度,有着很强的逻辑性,需要加强学习。
2.每周代码较少。需要我去多练习多打代码。
冒泡排序 :在一组数组中,对相邻的数据进行比较,并且按相对应的顺序进行交换,在此过程中,需要对每一个元素进行必要的比较,即在最后将会是最大的数,而最小的数就如同二氧化碳中的气泡浮到最上空。此过程最少需要交换共n-1次,但其交换次数也同样会随着数据的复杂度发生相应的改变。