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程序设计与数据结构教程(第二版)》学习指导

posted @ 2019-11-04 15:23  李金泉  阅读(147)  评论(1编辑  收藏  举报