2.1 完成PTA作业,并给出编程题完成截图
第一题截图
第二题截图
2.2 题目:快速寻找满足条件的两个数
能否快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值,为了简化起见,我们假设这个数组中肯定存在至少一组符合要求的解。
解法一:采用穷举法,从数组中任意取出两个数字,计算两者之和是否为给定的数字。
解法二:对数组中的每个数字arr[i]都判别Sum-arr[i]是否在数组中。
解法三:对数组进行排序,然后使用二分查找法针对arr[i]查找Sum-arr[i]。
解法一:
测试数据
输入m |
输入数组值 |
输出下标 |
5 |
1 5 3 2 4 |
0和4 2和3 |
4 |
3 4 2 6 1 |
0和4 |
解法二
测试数据
输入m |
输入数组值 |
输出下标 |
5 |
1 4 3 2 7 |
2和3 3和2 |
6 |
1 3 5 9 7 |
2和4 4和2 |
解法三
测试数据
输入m |
输入数组值 |
输出下标 |
8 |
8 7 5 0 3 |
2和4 |
48 |
13 4 26 35 44 |
0和3 1和4 |
2.2.2请说明三种算法的区别是什么?你还可以给出更好的算法吗?
区别在于对计算机的空间使用,运行速度略有快慢。 真想不出更好的算法了。。。。
2.3 请搜索有哪些排序算法,并用自己的理解对集中排序算法分别进行描述
a. 冒泡排序:比较相邻的两个数,如果前者比后者大,则进行交换。每一轮排序结束,选出一个未排序中最大的数放到数组后面。
b. 选择排序:从第一个数开始,每次和后面剩余的数进行比较,若升序,则如果后边的数比当前数字小,进行交换,和后面的所有的数比较、交换后,就会将当前的最小值放在当前的位置。
c. 希尔排序:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序。
d. 快速排序:先在序列中选一个数,然后将大于这个数放在右边,小于这个数的放在左边,就分成两个区,然后再将两个区排序。
e. 插入排序:插入排序算法是基于某序列已经有序排列的情况下,通过一次插入一个元素的方式按照原有排序方式增加元素。
f. 堆排序:把最大堆堆顶的最大数取出,将剩余的堆继续调整为最大堆,再次将堆顶的最大数取出,这个过程持续到剩余数只有一个时结束。
2.4 请给出本周学习总结
1 学习进度条
周/日期 |
这周花的时间 |
代码行数 |
学到的知识点简介 |
目前比较迷惑的问题 |
第一周 |
3天 |
87 |
|
|
第二周 |
4天 |
127 |
数组运用 |
|
2 累积代码行和博客字数
周次 |
代码行数 |
博客字数 |
第一周 |
87 |
568 |
第二周 |
127 |
693 |
3 学习内容总结和感悟
对数组运用不熟练,上学期所学有许多的细节不注意。