20182318 2019-2020-1 《数据结构与面向对象程序设计》第8周学习总结
教材学习内容总结
查找
- 线性查找
- 二分查找
排序
- 选择排序
- 插入排序
- 冒泡排序
- 快速排序
- 归并排序
分析查找和排序算法
比较查找算法
线性时间复杂度O(n)
二分查找有对数阶的复杂度,对于大的查找池来说,这非常有效率
比较排序算法
f(n)= (n-1)(一个常数n + 另一个常数)=an^2+bn+c
其中a,b,c等常数不重要,分析中只有n^2有意义
其他
快速排序,简单排序,哈希排序,归并排序等
教材学习中的问题和解决过程
-
问题1:为什么要设哨兵
-
问题1解决方案:这一过程可以使循环减少一个判断语句,循环次数多了以后就可以显著提高效率
-
问题2:二分查找是不是一定要比顺序查找效率更高一点呢
-
问题2解决方案:这个不一定,各有千秋。二分查找有它自身的限制,就是一定要在有序数组中查找,否则会出现错误.
因此应该在有序数组中使用二分查找,无序数组中使用顺序查找更好 -
问题3:五种排序的比较
-
图片
-
问题4:什么是算法的稳定性
-
问题4解决方案:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。
代码调试中的问题和解决过程
- 问题1:==,equals和compareTo的区别?
- 问题1解决方案:
- "equals": 比较的是两个字符串中的每个符是否相同,
例如:a="1243", b="1243",那么a.equals(b)就会返回TRUE,因为a和b两个字符串中的每一个字
符都相同,如果对a或者b中的任何一个做任何修改,equals()就会返回false。 - ”==":比较的是两个字符串是否同时引用的一个地址,
如果a=new String("abc");b=a;b引用的a, 所以a == b的比较就会返回TRUE。 - compareTo(): 这个函数的作用就是对两个字符串按字典排序的方式进行比较,返回两个字符串中第一个不同的字符的ascII码差值。
- 问题2:什么是归并排序
- 问题2解决方案:“归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。”
归并排序为何高效博客链接
代码托管
(statistics.sh脚本的运行结果截图)
上周考试错题总结
上周无考试。
结对及互评
- 结对学习内容
- 对一些类和程序包的用法和作用的讨论。
- 对编写代码过程中出现的问题相互讨论解决。
- 对书上课后题如何编写的讨论。
点评:
点评过的同学博客和代码
其他(感悟、思考等,可选)
学习还需下真功夫
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
第八周 | 1388/1000 | 3/7 | 22/60 |
-
计划学习时间:30小时
-
实际学习时间:20小时
-
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)