c语言ll博客园作业02
| 这个作业属于哪个课程 | c语言程序与设置 |
|---|---|
| 这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/CST2020-1/homework/11807 |
| 这个作业的目标 | 掌握数组的基本用法 |
| 学号 | 20208935 |
2.1 完成PTA作业,并给出编程题完成截图(5分)

2.2 题目:快速寻找满足条件的两个数
能否快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值,为了简化起见,我们假设这个数组中肯定存在至少一组符合要求的解。
解法一:采用穷举法,从数组中任意取出两个数字,计算两者之和是否为给定的数字。
解法二:对数组中的每个数字arr[i]都判别Sum-arr[i]是否在数组中。
解法三:对数组进行排序,然后使用二分查找法针对arr[i]查找Sum-arr[i]。
要求:
1.根据三种解法给出相应的代码,并给出测试数据。(15分)




2.请说明三种算法的区别是什么?你还可以给出更好的算法吗?(10分)
第一种和第二种都是穷举、遍历数组
第三种使用二分查找法,使循环次数大幅减少,提高效率
2.3 请搜索有哪些排序算法,并用自己的理解对集中排序算法分别进行描述(5分)
主要的内排序包括冒泡、插入、希尔、堆排序、归并、快速、桶排序等。
冒泡排序:两个数比较大小,较大的数下沉,较小的数冒起来。
选择排序:在长度为N的无序数组中,第一次遍历n-1个数,找到最小的数值与第一个元素交换;
第二次遍历n-2个数,找到最小的数值与第二个元素交换;
。。。
第n-1次遍历,找到最小的数值与第n-1个元素交换,排序完成。
插入排序:在要排序的一组数中,假定前n-1个数已经排好序,现在将第n个数插到前面的有序数列中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。
希尔排序:在要排序的一组数中,根据某一增量分为若干子序列,并对子序列分别进行插入排序。
然后逐渐将增量减小,并重复上述过程。直至增量为1,此时数据序列基本有序,最后进行插入排序。
快速排序:先从数列中取出一个数作为对比值;
将比这个数小的数全部放在它的左边,大于或等于它的数全部放在它的右边;
对左右两个小数列重复第二步,直至各区间只有1个数。
2.4 请给出本周学习总结(15分)
1 学习进度条(5分)
| 周/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的问题 |
|---|---|---|---|---|
| 第一周 | 3小时 | 60 | 学会文件的简单用法 | 不明白这些这些代码的含义和用发,只会看书上的格式照搬。 |
| 第二周 | 4小时 | 100 | 数组的使用 | 对于有n个元素的数组怎么用不会 |
2 累积代码行和博客字数(5分)
| 时间 | 博客字数 | 代码行数 |
|---|---|---|
| 第一周 | 960 | 60 |
| 第二周 | 1150 | 100 |

3 学习内容总结和感悟(5分)

感觉有点不能理解明白题目的要求,可能是知识不够吧!有时想到写的代码比较复杂.
浙公网安备 33010602011771号