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

    这个作业属于哪个课程 https://edu.cnblogs.com/campus/zswxy/SE2020-2/
    这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/SE2020-2/homework/11825
    这个作业的目标 <学会使用数组进行选择排序法运用和选择和循环的嵌套使用>
    学号 <20209126>

    一、本周教学内容&目标

    第七章 数组 7.17.1 输出所有大于平均值的数
    1.学生知道在哪种情况下可以使用构造数据类型—数组进行数据的处理
    2.掌握用一维数组进行编程
    3.掌握选择排序法和二分查找法

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

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


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

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

    (2)

    (3)

    2.请说明三种算法的区别是什么?你还可以给出更好的算法吗?(10分)
    解法一:最易操作,但技术不高,且运行时间相对较长
    解法二:将一个数拆成两个数相加,看着两个数是否在数组中。
    解法三:它的编写是要先对数组进行一个排序,然后使用二分法查找,这种方法运行时间减少,提高了效率。
    2.3 请搜索有哪些排序算法,并用自己的理解对集中排序算法分别进行描述(5分)
    冒泡算法、 择排序 插入排序 希尔排序 归并排序 快速排序
    算法的特点:
    1.有限性:一个算法必须保证执行有限步之后结束。
    2.确切性: 一个算法的每一步骤必须有确切的定义。
    3.输入:一个算法有零个或多个输入,以刻画运算对象的初始情况,所谓零个输入是指算法本身给定了初始条件。
    4.输出:一个算法有一个或多个输出。没有输出的算法毫无意义。
    5.可行性:算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步,即每个计算步都可以在有限时间内完成(也称之为有效性)。
    (1)冒泡排序:
     从第一个数开始,相邻元素两两对比,小的数放前面。(每循环一次,最后一个数都会被确定下来,为每轮的最大数)
    选择排序: 从第一个数开始,循环一圈找最小的数交换位置。(每循环一圈,第一个数都会被确定下来,为每轮最小的值)
    (2插入排序:从第二个数开始,跟前一个数比较,若比前一个数小,则交换位置,接着跟前一个数比较,直到比前一个数大为止。(从第一张开始整理扑克牌,小的往前插)(可能会出现一个数从最后比较到最前面,比较费时)
    (3)希尔排序: 希尔排序属于插入类排序,是将整个有序序列分割成若干个小的子序列分别进行插入排序。
    排序过程:先取一个正整数d1<n,把所有序号相隔d1的数组元素放一组,组内进行直接插入排序,然后取d2<d1,重复上述分组和排序操作,直至d1=1,即所有记录放进一个组中排序为止。(将每间隔一定步距的数取出来进行比较,比如gap=5,就是把第1个、第6个、第11个...数取出来进行插入排序)优点:当n值很大时,数据项每一趟排序需要移动的个数很少,但数据项的距离很长;当n值减小时,每一趟需要移动的数据增多,此时已经接近于它们排序后的最终位置。
    (4)希尔分析:希尔排序是按照不同步长对元素进行插入排序,当刚开始元素很无序的时候,步长最大,所以插入排序的元素个数很少,速度很快;当元素基本有序了,步长很小,插入排序对于有序的序列效率很高。所以,希尔排序的时间复杂度会比o(n^2)好一些。
    (5)归并排序:归并排序有两种实现方法:自上而下的递归;自下而上的迭代。下面讲递归法:
    将原数组用二分法一直分到两个数为一组,然后通过比较将较小的数放到前面(通过一个中间数组排序);然后一层层向上排序。(就是两个数比较进行排序,然后两组(四个数)进行比较排序,然后两组(八个数)进行比较排序…)
    (6)快速排序:快速排序思想:先找到一个基准点(一般指数组的中部),然后数组被该基准点分为两部分,依次与该基准点数据比较,如果比它小,放左边;反之,放右边。 左右分别用一个空数组去存储比较后的数据。最后递归执行上述操作,直到数组长度<=1。
    特点:快速,常用。缺点是需要另外声明两个数组,浪费了内存空间资源。
    2.4 请给出本周学习总结(15分)
    1 学习进度条(5分)

    周/日期 花的时间 代码行数 学到的知识简介 目前疑惑的地方
    第一周/03.01~03.07 13h 120 学会读取文件数据并运算 有许多的新的函数类型不会用
    第二周/03.08~03.14 15h 150 学会使用数组进行选择排序法运用和选择和循环的嵌套使用 大型数据运算容易出错

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

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

    感悟:还是要好好学习,提前预习

  • 相关阅读:
    百度点聚合功能,自定义针头功能
    iOS之极光推送
    iOS之短信认证
    iOS FMDB
    iOS 远程推送
    iOS之本地推送(前台模式与后台模式)
    iOS指纹识别
    关于——GCD
    关于——NSThread
    给label text 上色 && 给textfiled placeholder 上色
  • 原文地址:https://www.cnblogs.com/lcjddd/p/14565966.html
Copyright © 2011-2022 走看看