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

    1.作业头

    这个作业属于哪个课程 https://edu.cnblogs.com/campus/zswxy/SE2020-2
    这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/SE2020-2/homework/11825
    这个作业的目标 对上课所学习的数组知识进行一个深入了解与巩固,熟悉用数组进行编程,学习选择排序法和二分查找法,对自己这周的学习情况进行一个学习总结
    学号 20209123

    一、本周教学内容&目标

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

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

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

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

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

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

    7-1 年龄与疾病


    7-2 选择排序法


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

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

    解法一:采用穷举法,从数组中任意取出两个数字,计算两者之和是否为给定的数字。
    解法二:对数组中的每个数字arr[i]都判别Sum-arr[i]是否在数组中。
    解法三:对数组进行排序,然后使用二分查找法针对arr[i]查找Sum-arr[i]。

    要求:

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

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

    测试数据
    输入数据 输出数据
    5   3   1 4 2 1,4
    5   5   1 2 3 4 6 3,2  4,1
    7   7   1 2 3 4 5 6 7 4,3  5,2  6,1
    10   10   1 2 3 4 5 6 7 8 9 10 6,4  7,3   8,2   9,1
    解法二:对数组中的每个数字arr[i]都判别Sum-arr[i]是否在数组中。

    测试数据
    输入数据 输出数据
    4   3   1 2 3 1,3
    5   5   1 2 3 4 5 1,4   2,3
    6   6   1 2 3 4 5 6 1,5   2,4
    7   8   10 11 1 2 3 4 5 16 2,5   3,4
    解法三:对数组进行排序,然后使用二分查找法针对arr[i]查找Sum-arr[i]。


    测试数据
    输入数据 输出数据
    5   5   1 3 2 4 7 1,4  3,2
    7   6   1 3 2 4 5 6 1,6  3,4  2,5
    10   4   2 8 3 5 2,8
    8   6   4 3 6 2 5 2,6  3,5

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

    区别:

    1.解法一:穷举法,这种方法比较简单与直观,不需要很多的思考就可以写出来,但是这种方法运算量比较大,运行的时间长,需要一个一个的去比较。
    2.解法二:这种方法是在解法二上的一个改进,和解法一的区别不是很大。
    3.解法三:这种方法是代码编写三个中最难写的一种,但是,也是最具有意义的一种,它的编写是要先对数组进行一个排序,然后使用二分法查找,这种方法运行时间减少,提高了效率。

    更好的算法:

    我们可以使用快速排序的方法,在区间中随机挑选一个元素作基准,将小于基准的元素放在基准之前,大于基准的元素放在基准之后,再分别对小数区与大数区进行排序。

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

    1.选择排序法:在未排序的n个数找到最小的数,将他与第一个数交换,然后,在剩下未排序的n-1个数中找到最小数,将他与第二个数交换,如此循环。
    2.冒泡排序法:将一个列表中的两个相邻元素进行比较,并将最小的元素交换到前面。两个元素中较小这样就会往前移,而较大的会交换到后面,这个过程将被重复执行,直到所有元素都被排序。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。
    3.插入排序:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。
    4.希尔排序:递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法,插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率
    但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位。
    5.归并排序:把数据分为两段,从两段中逐个选最小的元素移入新数据段的末尾。可从上到下或从下到上进行。
    6.快速排序:在区间中随机挑选一个元素作基准,将小于基准的元素放在基准之前,大于基准的元素放在基准之后,再分别对小数区与大数区进行排序。

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

    1 学习进度条(5分)

    周/日期 这周所花的时间 代码行 学到的知识点简介 目前比较迷惑的问题
    3/1-3/7(第一周) 10小时 110行 回顾了数据类型和表达式,问文件 对于文件这一章的内容还不是特别的清楚了解,尤其是怎么样将文本文件应用到代码中去
    3.8-3.14(第二周) 18小时 421行 对数组进行一个了解,学会怎么样用数组来写代码,学习数组的几种排序的方法 二分法查找和冒泡排序法

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


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

    学习内容总结



    附加:

    冒泡排序法是怎么实现的:

    将一个列表中的两个相邻元素进行比较,并将最小的元素交换到前面。两个元素中较小这样就会往前移,而较大的会交换到后面,这个过程将被重复执行,直到所有元素都被排序。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。

    冒泡排序法和选择排序法的区别:

    冒泡排序是相邻的两个数进行比较,而选择排序是用后面的数和每一轮的第一个数相比较;冒泡排序每轮交换的次数比较多,而选择排序每轮只交换一次;冒泡排序是通过数去找位置,选择排序是给定位置去找数;当一个数组遇到相同的数时,冒泡排序相对而言是稳定的,而选择排序便不稳定;但是,由于选择排序交换的次数比较小,所以在时间效率上,选择排序优于冒泡排序。

    冒泡排序流程图:

    冒泡排序代码:

    学习感悟:

    1.C语言的学习我感觉越来越难了,但是也不能放弃吧。这次的作业写了挺久的,因为还有很多的东西不会,需要自己去找资料去了解,所以,在这里用了很长的时间。
    2.学习要认真,我感觉我最近的学习是真的有点划水的状态,所以,在之后的学习中,还是要努力一点叭。
    3.很多的人都已经去学习其他语言了,我觉得我也应该努力去学习了,不然我就比别人差了太多了。
    4.平时多多练习一些代码的编写把,尽量的提高自己的能力。

  • 相关阅读:
    逆元模板
    同余方程
    计算系数
    Mayan游戏
    【分治】聪明的质检员(二分)
    瑞士轮(归并排序)
    极值问题
    传纸条
    2014-2015-1学期学习计划
    桌面综合实训答辩验收详情
  • 原文地址:https://www.cnblogs.com/jn2765187762/p/14514462.html
Copyright © 2011-2022 走看看