zoukankan      html  css  js  c++  java
  • C语言II博客作业02

    这个作业属于哪个课程 https://edu.cnblogs.com/campus/zswxy/SE2020-4
    这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/SE2020-4/homework/11808
    这个作业的目标 学会用数组进行数据处理;掌握用一维数组进行编程;学会运用选择排序法和二分查找法,了解其他排序算法
    学号 20209217

    一、本周教学内容&目标

    第七章 数组 7.17.1 输出所有大于平均值的数

    1.学生知道在哪种情况下可以使用构造数据类型—数组进行数据的处理

    2.掌握用一维数组进行编程

    3.掌握选择排序法和二分查找法

    二、本周作业(总分:50分)

    2.1 完成PTA作业,并给出编程题完成截图(5分)

    编程题1:

    编程题2:

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

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


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

    测试数据:

    数组元素个数 输入一个数 输入元素 输出结果
    5 7 1 3 5 2 4 3 4
    7 8 2 3 4 2 5 3 3 2 4 2 3 4 3 5
    6 9 1 2 3 5 2 3 1 3 2 4 NOT FOUND

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

    测试数据:

    数组元素个数 输入一个数 输入元素 输出结果
    4 8 2 4 1 6 7 3 4 2 6
    8 25 2 3 5 13 42 24 12 20 4 2 5 5 20
    6 2 1 4 3 5 2 3 5 2 4 6 NOT FOUND

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

    测试数据:

    数组元素个数 输入一个数 输入元素 输出结果
    9 23 5 2 6 2 3 4 22 19 3 5 6 4 19
    11 63 34 54 2 35 5 2 3 53 29 23 35 11 32 29 34
    6 54 23 5 43 23 44 24 23 43 49 NOT FOUND


    第一种算法写起来比较容易,但效率不高;
    第二种算法是在一个无序数组里查找一个数,相对第一种只是思路变通了一下,效率也不是很高;
    第三种算法是先排序再二分查找,直接对两个数字的和进行一个有序的遍历,可以将时间缩短,从而提高了效率。
    除了以上算法,还可以先对数组进行排序,然后从i=0到n-1进行遍历,遍历arr[i]时,再调用函数找符合条件的两数即可。

    要求:
    1.根据三种解法给出相应的代码,并给出测试数据。(15分)
    2.请说明三种算法的区别是什么?你还可以给出更好的算法吗?(10分)
    

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

    ①排序算法有:冒泡排序、快速排序、直接插入排序、希尔(shell)排序、直接选择排序、堆(Heap)排序、归并排序。
    ②冒泡排序:比较数组中前后两数的大小,将较大的排在后面;快速排序:选第一个或最后一个作为基准元素,然后从前向后遍历数组,小于基准元素的放其左侧,大于基准元素的则存为基准元素;直接插入排序:用一个临时变量储存当前值,当前面的元素比后面大时,先把后面的元素存入临时变量,前面元素的值放到后面元素的位置,再到最后把其值插入到合适的数组位置;希尔(shell)排序:设置一个最小增量dk,刚开始dk设置为n/2,进行插入排序,随后再让dk=dk/2,继续进行插入排序,直到dk为1时完成最后一次插入排序即可;直接选择排序:依次选出最小的数放到数组的前面,然后继续到剩下的数组重复这一做法,直到全部完成;堆(Heap)排序:先将数组构造成一个大顶堆,然后把堆顶(数组最大值)和数组最后一个元素交换,把剩余的第二大值放到堆顶,然后放到剩余未排序数组最后面,依次类推,直至数组排序完成;归并排序:应用递归把数组分解成一个个小数组,直到小数组的数位有序,再把有序的小数组两两合并成有序的大数组。

    2.4 请给出本周学习总结(15分)

    1 学习进度条(5分)

    周/日期 这周所花的时间 代码行 学到的知识点简介 目前比较迷惑的问题
    第一周 3天 112 编写测试程序,检测代码是否正确,计算运行时间 怎么使非常大的测试数据运算速度加快
    第二周 4天 177 用一维数组编程,掌握选择排序法和二分查找法等排序算法 有些排序算法不太懂,如直接插入排序等

    2 累积代码行和博客字数(5分)

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

    1、本周学习了数组,掌握用一维数组进行编程,在完成作业的过程中,学习了选择排序法和二分查找法,了解不同排序算法,;
    2、PTA作业选择题第二题本来觉得蛮简单的,但还是做错了,重做时发现之前所算结果果然是错的,做错原因是之前没有看清就开始算;
    3、这次PTA作业的编程题第二题花的时间较长,第一个测试点刚开始没拿到分,之后才发现原来是一些细节问题;
    4、弄懂还不明白排序算法。做题时,再简单也得仔细!

  • 相关阅读:
    Java基础知识强化97:final、finally、finally区别
    Java基础知识强化之集合框架笔记02:集合的继承体系图解
    Java基础知识强化之集合框架笔记01:集合的由来与数组的区别
    Java基础知识强化96:Calendar类之获取任意年份的2月有多少天的案例
    Java基础知识强化95:Calendar类之Calendar类的add()和set()方法
    Gym
    Gym
    Good Bye 2015 B. New Year and Old Property —— dfs 数学
    HDU1873 看病要排队 —— 优先队列(STL)
    HDU5877 Weak Pair dfs + 线段树/树状数组 + 离散化
  • 原文地址:https://www.cnblogs.com/zhge/p/14520298.html
Copyright © 2011-2022 走看看