作业2
这个作业属于哪个课程 | 2020计算机3班 |
---|---|
这个作业要求在哪里 | C语言II—作业02 |
这个作业的目标 | 知道在哪种情况下可以使用构造数据类型—数组进行数据的处理,用一维数组进行编程,选择排序法和二分查找法 |
学号 | 20209026 |
二、本周作业(总分:50分)
2.1 完成PTA作业,并给出编程题完成截图
2.1.1 年龄与疾病 (10 分)
2.1.2 选择排序法 (100 分)
2.2 题目:快速寻找满足条件的两个数
能否快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值,为了简化起见,我们假设这个数组中肯定存在至少一组符合要求的解。
解法一:采用穷举法,从数组中任意取出两个数字,计算两者之和是否为给定的数字。
解法二:对数组中的每个数字arr[i]都判别Sum-arr[i]是否在数组中。
解法三:对数组进行排序,然后使用二分查找法针对arr[i]查找Sum-arr[i]。
2.2.1 要求
要求一:根据三种解法给出相应的代码,并给出测试数据。(15分)
解法一:
解法二:
解法三:
要求二:请说明三种算法的区别是什么?你还可以给出更好的算法吗?(10分)
区别:三种不同的解法,所用时间逐级递减,并且,解法一二存在一个弊端:当数组中的数很多时,解法三大大减少了所需的时间,使得程序更加完美。
2.3 请搜索有哪些排序算法,并用自己的理解对集中排序算法分别进行描述(5分)
一.排序算法:冒泡,选择,插入,希尔,快速,归并,堆,基数;
二.冒泡算法:它重复地走访过要排序的数列,依次比较两个元素,如果他们的顺序错误就把他们交换过来。重复地进行直到没有再需要交换,说明该数列已经排序完成。(依次比较相邻的两个数,正序则不动,倒序则交换位置,如此循环,直到整个数组为有序为止)
三.选择排序:选择排序是每一次从待排序的数据元素中选出最小的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
1·从待排序序列中,找到关键字最小的元素
2·如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换
3·从余下的 N - 1 个元素中,找出关键字最小的元素,重复进行直到排序结束
四.快速排序:从数列中挑出一个元素作为基准。重新排列数列,把所有的比基准小的放在基准前面,反之放在后面(一样大可任意一边)完成后基准处在分区的中间位置。
五.插入排序:插入排序是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在从后向前扫描的过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间通过递归调用把小于基准元素和大于基准元素的子序列进行排序。
六.归并排序:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列;设定两个指针,最初位置分别为两个已经排序序列的起始位置;比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置;重复步骤3直到某一指针达到序列尾;将另一序列剩下的所有元素直接复制到合并序列尾。
2.4 请给出本周学习总结
1.学习进度条
周/日期 | 这周所花的时间 | 代码行 | 博客字数 | 学到的知识点简介 | 目前比较迷惑的问题 |
---|---|---|---|---|---|
3.1-3.3 | 6小时 | 198 | 523 | 第6章 回顾数据类型和表达式,第12章 文件 | 对于刚接触的文件还不够熟悉,当数据过大时,减少运算时间这个问题无法立刻解决 |
3.10-3.15 | 16小时 | 312 | 1379 | 一维数组,选择排序法和二分查找法 | 排列算法定义不清晰,二分查找法不是很理解 |
3.学习内容总结和感悟(5分)
1.经过寒假的两个月时间,在家没有及时的复习自己学习的知识,导致自己许多知识忘记了,在做作业的时候经常问同学问题。
2.自己对问题的思考没有进行全面的辨别,导致做题时没有思路,对题目的条件也考虑不全面。