20182335 2019-2020-1 《数据结构与面向对象程序设计》第八周学习总结
教材学习内容总结
一、查找
1、线性查找:从表头开始,依次将每个值与目标元素进行比较,最后找到目标或者到达表尾发现目标不存在于组中。
2、二分查找:如果查找池中的数据项有序,从表的中间开始查找,如果中间项不是所需值,根据目标与中间元素的大小比较确定元素在哪侧,在该侧继续从中间开始查找,每次排除一半的元素,确定目标元素。(二分查找必须保证数据项有序)
二、排序
1、选择排序:分别将每个值放到排好序的最终位置,从而完成一组值的排序。
平均时间复杂度为O(n2),稳定。
2、插入排序:重复地将一个具体的值插入到表中已有的子序列中,从而完成一组值的排序。每次将每个待排序的元素插入到有序子段中合适位置,直到表中全部元素均有序为止。
平均时间复杂度为O(n2),稳定。
3、冒泡排序:重复地比较表中的相邻元素,如它们呈逆序则交换它们。
平均时间复杂度为O(n2),稳定。
4、快速排序:根据一个任意选定的划分元素来对表进行划分,然后再递归地对划分元素两边的子段进行排序,从而完成对表的排序。
平均时间复杂度为O(nlog2n),不稳定。
5、归并排序:递归地对分表,直到每个子表只含有一个元素为止,然后再将子表按序合并,从而完成对表的排序。
平均时间复杂度为O(nlogn),稳定。
教材学习中的问题和解决过程
问题1:不是很理解有关快速排序这一方法
问题1解决方案:书上介绍的方法是先选择表中的一个元素作为划分元素,我觉得还是以第一个元素作为划分元素更有利于理解。以第一个元素作为枢轴,将后面的元素依次与其比较,较小的放在枢轴前,较大的放在枢轴后。将所有元素都比较结束后,以枢轴为中心将表分成两个部分,每个部分再次重复这一操作。直至每个划分段只有一个元素,递归应用给每一边后,则整个数组有序,从而实现了排序的过程。归并算法中也采取了这一逻辑。
问题2:对于常用的排序方法,究竟哪种方法效率更高?
问题2解决方案:
1.冒泡算法效率最低。
2.插入算法效率最高。
3.选择算法是冒泡算法的3.3倍。
4.插入算法是冒泡算法的4.7倍。
5.插入算法是选择算法的1.4陪。
代码调试中的问题和解决过程
问题1:程序13.1中重写了toString方法,不理解为何重写这一方法,对toString方法的掌握不清楚。
问题1解决方案:我先在网上了解了一下toString方法,这一方法的作用是把一个逻辑值转换为字符串,并返回结果。主要是返回结果这一项,在这个重写的方法中,toString返回了姓氏,名字和手机号码,这三个变量原本就是String类型,在重写的方法中直接返回,给新的Contact对象。
代码托管(https://gitee.com/li_jinquan/ljq/tree/master/src)
https://gitee.com/li_jinquan/ljq/tree/master/
上周考试错题总结
上周无考试
点评过的同学博客和代码
本周结对学习情况
20182311
感悟
本周事情比较多,学习时间不足,需要及时调整,花更多时间和精力去调整。下周开始要刻意训练自己的动手能力,多敲代码多看书。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 300/500 | 2/4 | 18/38 | |
第三周 | 500/1000 | 3/7 | 22/60 | |
第四周 | 325/500 | 2/4 | 18/38 | |
第五周 | 600/1000 | 3/7 | 22/60 | |
第六周 | 300/500 | 2/4 | 28/40 | |
第七周 | 300/500 | 2/4 | 18/40 | |
第八周 | 300/500 | 2/4 | 18/36 |
参考资料
《Java程序设计与数据结构教程(第二版)》
《Java程序设计与数据结构教程(第二版)》学习指导