学号 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分。得分情况如下:
正确使用Markdown语法加1分:
模板中的要素齐全加1分
教材学习中的问题和解决过程, (加4分)
代码调试中的问题和解决过程, (加2分)
周五前发博客的加1分
进度条中记录学习时间与改进情况的加1分
错题学习深入的加1分
- 结对学习情况真实可信的加1分
感想,体会不假大空的加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小时