20182315 第八周学习总结

学号 2019-2020-1 《数据结构与面向对象程序设计》第八周学习总结

教材学习内容总结

  • 线性查找:可设置哨兵,将a[0]设成需要找的值,每一个元素和哨兵进行比对,可优化程序。

  • 二分查找:二分查找的优势在于每次查找都可排除上次查找后一半的元素,极大加快查找速率。但二分查找需让数组排序,按顺序查找。

  • 选择排序:通过二重循环,每一次找出符合条件的最值元素,将此元素放在首位。

  • 插入排序:插入排序为依次排序,即将现插入的数字排号,以后插入的数字都在前面的排序里找到合适的位置,也采用二重循环,与选择排序相似。

  • 冒泡排序:与之前学过的C语言相同,一次循环,经过n次比较,确定一个最值,放在开头或结尾。

  • 快速排序:对目标进行多次分块排序,每次应用于左右两个划分快,直到每个人划分快只包含一个元素。代码中用到递归语句,if划分块中元素不多于一个时,停止递归。内层递归中,从划分块两端向中间查找,遇到错排的两个元素,交换其位置,知道left和right指针相遇时停止。递归使程序无线分裂成两个程序,直到停止为止。排序核心为:一次排序确定一个元素的位置。

  • 归并排序:先将数表拆成几个长度为1或2的子表,再将子表排序。

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

  • 问题1:归并排序的实现原理不够清晰,不理解几次分块后如何排序?。
  • 问题1解决办法:相比于快速排序一次确定一个元素的位置,归并排序排的是元素块的位置,接收三个参数,通过将数表一块一块的排好序,最终整合,以达到简化排序的目的。

  • 问题2:对于多次运用的递归方法,不明确其使用方法,及优势。
  • 问题2解决办法:经学习,递归的思想在于将问题规模变得更小,自己调用自己,但要明确有一个结束递归的条件。在递归参数传入的时候,应谨慎设置参数变化。

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

  • 问题1: 在二分法运行中出现进入死循环情况,经单步调试,找到问题根源。

  • 问题1解决办法:在程序中first或mid通常直接等于mid,而mid为(first+last)/2所得,才会出现如上图所所现的问题,进入死循环。解决办法为每次时first或last为mid+/-1,这样可完美解决死循环。
  • 问题2:在作业中,要用到程序运行时间的代码,之前没有了解,不知如何编写。

  • 问题2解决办法:
    通过获得程序运行前后时间作差的程序运行时间。

    代码托管

上周考试错题总结

未考试

结对及互评

  • 基于评分标准,我给本博客打分:13分。得分情况如下:
  1. 正确使用Markdown语法加1分:

  2. 模板中的要素齐全加1分

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

  4. 代码调试中的问题和解决过程, (加2分)

  5. 周五前发博客的加1分

  6. 进度条中记录学习时间与改进情况的加1分

  7. 错题学习深入的加1分

  8. 结对学习情况真实可信的加1分
  9. 感想,体会不假大空的加1分

点评过的同学博客和代码

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

查找,排序这部分的学习,更注重对循环,递归此类代码重复运行掌控的能力,掌握好代码循环开始结束条件使本章学习的重点。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 200/200 2/2 20/20
第二周 300/500 2/4 18/38
第三周 500/1000 3/7 22/60
第四周 300/1300 2/9 30/90
第五周 500/1000 3/7 22/60
第六周 700/1300 2/9 22/90
第七周 1300/1000 3/7 30/60
第八周 1200/1500 3/7 30/60
  • 计划学习时间:20小时

  • 实际学习时间:22小时

参考资料

猜你喜欢

转载自www.cnblogs.com/zjwbk/p/11795430.html