一、作业头
这个作业属于哪个课程 | 计科四班 |
---|---|
这个作业要求在哪里 | 作业02 |
这个作业的目标 | 掌握选择排序法和二分查找法,掌握用一维数组进行编程,知道在哪种情况下可以使用构造数据类型—数组进行数据的处理 |
学号 | 20209072 |
二、本周作业
2.1 完成PTA作业,并给出编程题完成截图
2.1.1
2.1.2
2.2 题目:快速寻找满足条件的两个数
能否快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值,为了简化起见,我们假设这个数组中肯定存在至少一组符合要求的解。
- 根据三种解法给出相应的代码,并给出测试数据。
-
解法一:采用穷举法,从数组中任意取出两个数字,计算两者之和是否为给定的数字。
-
解法二:对数组中的每个数字arr[i]都判别Sum-arr[i]是否在数组中。
-
解法三:对数组进行排序,然后使用二分查找法针对arr[i]查找Sum-arr[i]。
- 请说明三种算法的区别是什么?你还可以给出更好的算法吗?
- 解法一:遍历数组内所有元素,寻找哪两数之和为题目所求和
- 解法二:遍历数组内所有元素,以数组其中一个数为标准,用题目所求和减去这个数的差
- 解法三:将数组按一定顺序排序后从首尾向中间寻找,大量减少了循环所需时间。
2.3 请搜索有哪些排序算法,并用自己的理解对集中排序算法分别进行描述
- 归并排序:是分治法的典型应用,将每个问题分解成个个小问题,将每个小问题解决,然后合并。
- 选择排序:是一种简单直观的排序算法,首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
- 冒泡排序:重复地走访过要排序的元素列,依次比较两个相邻的元素,重复地进行直到没有相邻元素需要交换,则说明排序完毕。
- 插入排序:在待排序的元素中,假设前面n-1(其中n>=2)个数已经是排好顺序的,现将第n个数插到前面已经排好的序列中,然后找到合适自己的位置,使得插入第n个数的这个序列也是排好顺序的。
- 快速排序:.根据基准数将数列进行分区,小于基准数的放左边,大于基准数的放右边;
重复分区操作,知道各区间只有一个数为止。 - 堆排序:把最大堆堆顶的最大数取出,将剩余的堆继续调整为最大堆,再次将堆顶的最大数取出,这个过程持续到剩余数只有一个时结束。
- 希尔排序:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序:
- 计算排序:将输入的数据值转化为键存储在额外开辟的数组空间中....(无语 最看不懂的)
- 桶排序:将数组分到有限数量的桶子里,然后对每个桶子再分别排序,最后将各个桶中的数据有序的合并起来。
2.4 请给出本周学习总结
1. 学习进度条
周/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的问题 |
---|---|---|---|---|
第一周/3.7 | 8h | 125 | 读取并利用文件里的数据 | 文件方面的知识基本不了解 |
第二周/3.14 | 10h | 130 | 数组、排序算法 | 其他算法的运用,只知道概念不懂如何运用 |
2. 累积代码行和博客字数
时间 | 博客字数 | 代码行数 |
---|---|---|
第一周 | 843 | 125 |
第二周 | 733 | 130 |
3.3 学习内容总结和感悟
3.3.1 学习内容总结
3.3.2 学习体会
- 在学习的东西逐渐深入,要学会自学,现在各种搜索引擎都需要用上。
- 看到题目不能马上反应出应该运用什么算法来解题,解题的时间过于漫长。
- 已经开始找到解题的思路,需要加强练习。
冒泡排序
- 冒泡排序是指在一个数组中,对相邻元素进行比较,比较完进行对应的交换,对每一个元素进行比较,最后剩下最大的数。
- 这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。