C语言II—作业02
| 这个作业属于哪个课程 | C语言程序设计II |
| ---- | ---- | ---- |
| 这个作业要求在哪里 | 作业要求 |
| 这个作业的目标 | 掌握并运用本周所学的知识 |
| 学号 | 20209041 |
2.1 完成PTA作业,并给出编程题完成截图
7-1 年龄与疾病
7-2 选择排序法
2.2 题目:快速寻找满足条件的两个数
能否快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值,为了简化起见,我们假设这个数组中肯定存在至少一组符合要求的解。
解法一:采用穷举法,从数组中任意取出两个数字,计算两者之和是否为给定的数字。
测试数据:
解法二:对数组中的每个数字arr[i]都判别Sum-arr[i]是否在数组中。
测试数据:
解法三:对数组进行排序,然后使用二分查找法针对arr[i]查找Sum-arr[i]。
测试数据:
要求:
1.根据三种解法给出相应的代码,并给出测试数据。
2.请说明三种算法的区别是什么?你还可以给出更好的算法吗?
1.解法一:这是同学们最容易想到的,而且最易操作,但技术不高,且运行时间相对较长
2.解法二:y是总和,把y拆成两个数相加,看着两个数是否在数组中,虽然方法与第一个没啥改变,但思考方式确实截然不同的。
3.解法三:这种方法是代码编写三个中最难写的一种,但是,也是最具有意义的一种,它的编写是要先对数组进行一个排序,然后使用二分法查找,这种方法运行时间减少,提高了效率。
2.3 请搜索有哪些排序算法,并用自己的理解对集中排序算法分别进行描述
1.冒泡排序法:将一个列表中的两个元素进行比较,并将最小的元素交换到顶部。两个元素中较小的会冒到顶部,而较大的会沉到底部,该过程将被重复执行,直到所有元素都被排序。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。
2.希尔排序:递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法,插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率
3.插入排序:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。
4.归并排序:把数据分为两段,从两段中逐个选最小的元素移入新数据段的末尾。可从上到下或从下到上进行。
5.选择排序法:在未排序的n个数找到最小的数,将他与第一个数交换,然后,在剩下未排序的n-1个数中找到最小数,将他与第二个数交换,如此循环。
6.快速排序:在区间中随机挑选一个元素作基准,将小于基准的元素放在基准之前,大于基准的元素放在基准之后,再分别对小数区与大数区进行排序。
2.4 请给出本周学习总结
1 学习进度条
周/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的问题 |
---|---|---|---|---|
第一周 | 12h | 132行 | 文件数据的处理和运用 | 文件怎么样和程序串联 |
第二周 | 20h | 212行 | 加深对数组印象,同时练习如何利用数组进行数的排序 | 进行大型数组排序是元素调用时总弄错 |
2 累积代码行和博客字数
3 学习内容
3.3.1学习内容总结
学习感悟:
2.学习要认真,我感觉我最近的学习是真的有点划水的状态,所以,在之后的学习中,还是要努力一点叭。
3.很多的人都已经去学习其他语言了,我觉得我也应该努力去学习了,不然我就比别人差了太多了。
4.平时多多练习一些代码的编写把,尽量的提高自己的能力。