20162304 2017-2018-1 《程序设计与数据结构》第三周学习总结
20162304 2017-2018-1 《程序设计与数据结构》第三周学习总结
教材学习内容总结
- 本章的内容是查找与排序,课本的学习大概就分为两个部分:
- 查找:线性算法和二分查找算法的学习;
- 排序:选择、插入、冒泡、快速及归并排序算法;
- 还有一点就是这些算法的算法复杂度的分析。
教材学习中的问题和解决过程
- 问题1:看不太懂快速排序部分的代码
- 问题1解决方案:通过对课本后面解释和一篇博客的研读有了一个较为初步的认识:过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
代码调试中的问题和解决过程
-
问题1:对于书上归并排序代码不太理解。
-
问题1解决方案:在学习后感觉以下代码更适合理解。
public void Merge(int[] array, int low, int mid, int high) {
int i = low; // i是第一段序列的下标
int j = mid + 1; // j是第二段序列的下标
int k = 0; // k是临时存放合并序列的下标
int[] array2 = new int[high - low + 1]; // array2是临时合并序列
// 扫描第一段和第二段序列,直到有一个扫描结束
while (i <= mid && j <= high) {
// 判断第一段和第二段取出的数哪个更小,将其存入合并序列,并继续向下扫描
if (array[i] <= array[j]) {
array2[k] = array[i];
i++;
k++;
} else {
array2[k] = array[j];
j++;
k++;
}
}
// 若第一段序列还没扫描完,将其全部复制到合并序列
while (i <= mid) {
array2[k] = array[i];
i++;
k++;
}
// 若第二段序列还没扫描完,将其全部复制到合并序列
while (j <= high) {
array2[k] = array[j];
j++;
k++;
}
// 将合并序列复制到原始序列中
for (k = 0, i = low; i <= high; i++, k++) {
array[i] = array2[k];
}
}
代码托管
因为git出现了些问题,重新克隆一下码云,所以日志全显示今天,接下来准备重新创建一个项目作为这学期的学习项目。
点评过的同学博客和代码
- 本周结对学习情况
- 20162318
- 结对照片
- 结对学习内容
- 查找与排序
其他(感悟、思考等,可选)
学习渐入佳境,感觉这周任务有点繁重,主要是因为校庆少听一节课,感觉有点吃力。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/0 | 1/1 | 10/10 | |
第二周 | 0/0 | 1/2 | 10/20 | |
第二周 | 163/163 | 1/3 | 12/32 |
-
计划学习时间:10小时
-
实际学习时间:12小时