20172330 2018-2019-1 《程序设计与数据结构》第五周学习总结

20172330 2018-2019-1 《程序设计与数据结构》第五周学习总结

教材学习内容总结

查找

  • 1.静态方法
    静态方法又称为类方法,能够经过类名来激活。
    在方法声明中,能够经过static修饰符就能够把它声明为静态的。html

  • 2.泛型方法
    git

  • 3.线性查找法
    即从列表头开始依次比较每个值,直至找到该目标元素或到列表尾未找到,这是一种最简单的查找方式,但它的效率并非高效的。算法

  • 4.二分查找法
    二分查找算法是在有序数组中用到的较为频繁的一种算法,就是不断将数组进行对半分割,每次拿中间元素和目标进行比较。数组

排序

排序是这样一个过程,即基于某一标准,将某一组项目按照某个规定顺序排列。具体可分为如下几种:
数据结构

当咱们渴望先知道排在前面的是谁时,咱们用选择排序;当咱们不断拿到新的数并想保持已有的数始终有序时咱们用插入排序;当给出的数列已经比较有序,只须要小幅度的调整一下时,咱们用冒泡排序。架构

  • 1.选择排序
    基本思想: 在要排序的一组数中,选出最小的一个数与第一个位置的数交换,而后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。
    算法步骤
    设数组为a[0…n-1]
  1. 初始时,数组全为无序区为a[0..n-1]。令i=0
  2. 在无序区a[i…n-1]中选取一个最小的元素,将其与a[i]交换。交换以后a[0…i]就造成了一个有序区。
  3. i++并重复第二步直到i==n-1。排序完成。
  • 2.插入排序
    基本思想: 在要排序的一组数中,假设前面(n-1) [n>=2] 个数已是排好顺序的,如今要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的, 如此反复循环,直到所有排好顺序。
    算法步骤:
    1.将第一待排序序列第一个元素看作一个有序序列,把第二个元素到最后一个元素当成是未排序序列。
    2.从头至尾依次扫描未排序序列,将扫描到的每一个元素插入有序序列的适当位置。(若是待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)学习

  • 3.冒泡排序
    冒泡排序是最经常使用的数组排序算法之一,它排序数组元素的过程老是小数往前放,大数日后放,相似水中气泡往上升的动做,因此称做冒泡排序。
    算法步骤:
    1.比较相邻的元素。若是第一个比第二个大,就交换他们两个。
    2.对每一对相邻元素做一样的工做,从开始第一对到结尾的最后一对。这步作完后,最后的元素会是最大的数。
    3.针对全部的元素重复以上的步骤,除了最后一个。
    4.持续每次对愈来愈少的元素重复上面的步骤,直到没有任何一对数字须要比较。
    测试

  • 4.快速排序
    快速排序是由东尼·霍尔所发展的一种排序算法。在平均情况下,排序 n 个项目要Ο(n log n)次比较。在最坏情况下则须要Ο(n2)次比较,但这种情况并不常见。事实上,快速排序一般明显比其余Ο(n log n) 算法更快,由于它的内部循环能够在大部分的架构上颇有效率地被实现出来。
    算法步骤:
    1 .从数列中挑出一个元素,称为 “基准”(pivot),
    2 .从新排序数列,全部元素比基准值小的摆放在基准前面,全部元素比基准值大的摆在基准的后面(相同的数能够到任一边)。在这个分区退出以后,该基准就处于数列的中间位置。这个称为分区(partition)操做。
    3.基准的位置将数列分为左右两部分,将左右两部分按照上面的步骤重复(递归调用)便可。
    递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,可是这个算法总会退出,由于在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。.net

  • 5.归并排序
    归并排序是创建在归并操做上的一种有效的排序算法。该算法是采用分治法的一个很是典型的应用。
    算法步骤:
  1. 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
  2. 设定两个指针,最初位置分别为两个已经排序序列的起始位置
  3. 比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
  4. 重复步骤3直到某一指针达到序列尾
  5. 将另外一序列剩下的全部元素直接复制到合并序列尾.

步骤2~5为合并两个有序区间设计

基数排序法

教材学习中的问题和解决过程

  • 问题1:查找算法的比较
  • 问题1解决方案:在将书上9.1.5阅读完以后又百度了一下详细的了解了
    区别:
    1.线性查找能够针对任何数组,将数组中的每项依次遍历出来以后,与所要查找项对比。
    消耗时间也是不规律的,可能查找项处于数组的第一位,也可能处于数组的最后一位。还有可能数组中彻底不存在须要查找的项目。
    2.二分查找法,针对有序数组使用。
    由于数组已经有序排列,能够经过将数组从中间分割,将中间项与所需查找项对比;而后再根据对比结果,再次向上或者向下,寻找中间项对比,直至完成查找。
    并且,对于查找最开始,能够经过与第一项和最末项的对比,肯定查找项是否处于此数组中。

线性查找与二分查找法的差别

  • 问题2:五种排序的比较
  • 问题2解决方案
    在阅读完书籍而且百度后进行了不少了解,能够说每一种都有其各自的特色,在不一样的环境下采用不一样的排序方法。

代码调试中的问题和解决过程

  • 问题1:在测试类的时候出现了错误
  • 问题1解决方案:检查后发现数组名在定义时出错。

代码托管

上周考试错题总结

结对及互评

  • 基于评分标准,我给严域俊的博客打分:7分。得分状况以下:

正确使用Markdown语法(加1分)

模板中的要素齐全(加1分)

教材学习中的问题和解决过程, (加3分)

感想,体会真切的(加1分)

点评认真,能指出博客和代码中的问题的(加1分)

  • 博客中值得学习的或问题:
    • 图片和文字相结合,方便理解。
    • 增长了博客中的目录,方便查看,同时样式进行了更新,显得更加美观
    • 阅读了许多资料,使得博客更有说服力。
  • 代码中值得学习的或问题:
    - commit依旧很详细,有条理性。

点评过的同窗博客和代码

  • 本周结对学习状况
    • 20172333
    • 结对学习内容
      教材第9章,运行教材上的代码
      完成课后自测题,并参考答案学习
      完成课后自测题,并参考答案学习
      完成程序设计项目:至少完成PP9.二、PP9.3

其余(感悟、思考等,可选)

这一周花了点心思在这一章上面,也好好阅读了不少内容,掌握的还算能够。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 0/0 1/1 10/10
第二周 700/700 1/2 10/20
第三周 700/1400 1/3 10/30
第四周 500/1900 2/5 10/40
第五周 569/2469 1/6 10/50

参考:软件工程软件的估计为何这么难软件工程 估计方法

  • 计划学习时间:10小时

  • 实际学习时间:10小时

参考资料

相关文章
相关标签/搜索