20182314《程序设计与设计结构》 第八周学习总结
20182314《程序设计与设计结构》 第八周学习总结
教材学习内容总结
第十四章:算法分析:
1、什么是归并排序?
并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并排序是一种稳定的排序方法。
2、顺序查找:顺序查找是按照序列原有顺序对数组进行遍历比较查询的基本查找算法。
3、二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。
4、哈希查找:哈希查找是通过计算数据元素的存储地址进行查找的一种方法。
5、插入排序:对于任意一个序列以及一个给定的元素,将给定元素与序列中元素依次比较,直到找出与给定关键字相同的元素,或者将序列中的元素与其都比较完为止。
6、折半插入排序:折半插入排序(binary insertion sort)是对插入排序算法的一种改进,由于排序算法过程中,就是不断的依次将元素插入前面已排好序的序列中。由于前半部分为已排好序的数列,这样我们不用按顺序依次寻找插入点,可以采用折半查找的方法来加快寻找插入点的速度。
7、快速排序:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
教材学习中的问题和解决过程
-
问题1:老师在课上说选择排序不是一种稳定的算法,我很疑惑为什么。
-
问题1解决方案:后来,我仔细想了一下选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推,直到第n - 1个元素,第n个元素不用选择了,因为只剩下它一个最大的元素了。那么,在一趟选择,如果当前元素比一个元素小,而该小的元素又出现在一个和当前元素相等 的元素后面,那么交换后稳定性就被破坏了。比较拗口,举个例子,序列5 8 5 2 9,我们知道第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏了,所以选择排序不是一个稳定的排序算法。
代码调试中的问题和解决过程
-
问题1:设置哨兵在数组第一位到底有啥用
-
问题1解决方案: 在链表中的插入、删除操作,需要对插入第一个结点和删除最后一个结点进行特殊处理,
比如插入时判断head结点是否null,使用哨兵结点后可以最大限度减少这种判断。
代码托管
上周考试错题总结
本周无错题
结对及互评
- 本周结对学习情况:
20182330
点评:
-
代码练习较多,问题较为深邃(至少我看不懂)
-
基于评分标准我给本博客打分:16分。得分情况如下:
1.正确使用Markdown语法(加1分)
2.模板中的要素齐全(加1分)
3.教材学习中的问题和解决过程(加3分)
4.代码调试中的问题和解决过程(加4分)
5.其他加分(加7分)
6.进度条中记录学习时间与改进情况(1)
7.感想,体会不假大空(1)
8.有动手写新代码(1)
9.排版精美(1)
10.错题学习深入(1)
11.点评认真,能指出博客和代码中的问题(1)
12.结对学习情况真实可信(1)
其他(感悟、思考等,可选)
最近java水平感觉有所提升,但还是不太想写书上的代码。最近又要学安卓了,安卓确实有点难,一开始都没找到敲代码的位置,确实有点心态爆炸,希望能在跟上的同时尽量往前面撵一撵。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 10000行 | 30篇 | 400小时 | |
第7周 | 808/5181 | 2/2 | 20/20 |