C语言II博客作业02

1.作业头

这个作业属于哪个课程 https://edu.cnblogs.com/campus/zswxy/CST2020-4
这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2020-4/homework/11824
这个作业的目标 <学习数组,掌握选择排序法和二分查找法>
学号 <20209059>

二、本周作业

2.1 完成PTA作业,并给出编程题完成截图

2.2 题目:快速寻找满足条件的两个数

能否快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值,为了简化起见,我们假设这个数组中肯定存在至少一组符合要求的解。

解法一:采用穷举法,从数组中任意取出两个数字,计算两者之和是否为给定的数字。

解法二:对数组中的每个数字arr[i]都判别Sum-arr[i]是否在数组中。

解法三:对数组进行排序,然后使用二分查找法针对arr[i]查找Sum-arr[i]。

要求:

1.根据三种解法给出相应的代码,并给出测试数据。

解法一:

解法二:

解法三:

区别:解法一使用穷举法,直接,简单,容易理解,但局限性大,不适合使用大的数据
解法二:使用了数组,是在上一组解法的基础上用数组将数据处理,相比于解法一效益更高
解法三:使用二分查找法,二分法的效率很高但是操作相对复杂 并且二分法只有在数组里面的数是要有序的时候才能使用

2.请说明三种算法的区别是什么?你还可以给出更好的算法吗?

 不知道还有什么更好的算法

2.3 请搜索有哪些排序算法,并用自己的理解对集中排序算法分别进行描述

1.冒泡排序法:比较相邻的两个数,如果前者比后者大,则交换两者位置,反复进行两两比较直到最大值或最小值在数据最两端, 反复再进行两两比较,最后会得到有序数据
2.快速排序法:先选定一个数,一般选取数组最后一个数或者第一个数,从前向后或从后往前进行比较,当比较的数小于它时放于他的左边,大则放于右边
3.插入排序法:将数据从前往后依次排序,选取一个元素,与前边已经排序好了的元素去对比,如果小就插入到该位置,其他元素后移
4.归并排序法:将数据分成几组,每一组小数剧自己进行排序,再将已排好序的数组进行对比排列,最后合并
5.选择排序法:将要排序的数组分成两部分,一部分是从大到小已经排好序的,一部分是无序的,从无序的部分取出最小的放到已经排序的最后面
6.希尔排序法:将整个无序列分割成若干小的子序列分别进行插入排序的方法

2.4 请给出本周学习总结

2.4.1学习进度条

周/日期 这周所花的时间 代码行 学到的知识点简介 目前比较迷惑的问题
3.8/3.28 11h 170 了解数组,了解使用算法 很多算法不知道怎么运用

2.4.2 累积代码行和博客字数

2.4.33 学习内容总结和感悟

内容总结:

感悟:1.学的很迷糊,有很多听不懂,前面的有些内容忘了,听起来有些难度
2.自己在家玩得太飘了,需要尽快干起来
3.有些算法和二维数组不怎么懂
4.冒泡排序法:比较相邻的两个数,如果前者比后者大,则交换两者位置,反复进行两两比较直到最大值或最小值在数据最两端, 反复再进行两两比较,最后会得到有序数据

posted @ 2021-03-28 03:40  大胖娃xxr  阅读(49)  评论(0编辑  收藏  举报