20162304 2017-2018-1 《程序设计与数据结构》第三周学习总结

20162304 2017-2018-1 《程序设计与数据结构》第三周学习总结

教材学习内容总结

  • 本章的内容是查找与排序,课本的学习大概就分为两个部分:
  1. 查找:线性算法和二分查找算法的学习;
  2. 排序:选择、插入、冒泡、快速及归并排序算法;
  • 还有一点就是这些算法的算法复杂度的分析。

教材学习中的问题和解决过程

  • 问题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小时

参考资料

原文地址:https://www.cnblogs.com/zhanghaolin/p/7588377.html