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

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

教材学习内容总结

查找

  1. 线性查找
  2. 二分查找

排序

  1. 选择排序
  2. 插入排序
  3. 冒泡排序
  4. 快速排序
  5. 归并排序

分析查找和排序算法

比较查找算法

线性时间复杂度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解决方案:
  1. "equals": 比较的是两个字符串中的每个符是否相同,
    例如:a="1243", b="1243",那么a.equals(b)就会返回TRUE,因为a和b两个字符串中的每一个字
    符都相同,如果对a或者b中的任何一个做任何修改,equals()就会返回false。
  2. ”==":比较的是两个字符串是否同时引用的一个地址,
    如果a=new String("abc");b=a;b引用的a, 所以a == b的比较就会返回TRUE。
  3. compareTo(): 这个函数的作用就是对两个字符串按字典排序的方式进行比较,返回两个字符串中第一个不同的字符的ascII码差值。
  • 问题2:什么是归并排序
  • 问题2解决方案:“归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。”
    归并排序为何高效博客链接

代码托管

(statistics.sh脚本的运行结果截图)

上周考试错题总结

上周无考试。

结对及互评

  • 结对学习内容
  • 对一些类和程序包的用法和作用的讨论。
  • 对编写代码过程中出现的问题相互讨论解决。
  • 对书上课后题如何编写的讨论。

点评:

点评过的同学博客和代码

  • 本周结对学习情况
    • 20182333
    • 结对照片
    • 结对学习内容
      • XXXX
      • XXXX
      • ...
  • 上周博客互评情况

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

学习还需下真功夫

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
第八周 1388/1000 3/7 22/60

参考:软件工程软件的估计为什么这么难软件工程 估计方法

  • 计划学习时间:30小时

  • 实际学习时间:20小时

  • 改进情况:

(有空多看看现代软件工程 课件
软件工程师能力自我评价表
)

参考资料

posted @ 2019-11-04 22:26  J~oker  阅读(68)  评论(1编辑  收藏