• 20162302 《程序设计与数据结构》第三周学习总结


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

    教材学习内容总结

    选择排序
    插入排序
    冒泡排序
    快速排序
    归并排序

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

    • 问题1:和结对伙伴在对于教材上的选择排序的工作原理产生争执,事后发现是在交换数据位置的时间上有分歧。
    • 一种理解是交换位置套在最内层for循环

    • 另一种理解是套在外层for循环

    • 问题1解决方法:
      具体的方法就是调用观察运行结果

      第一种方法可以看到出了一个非常明显的错误

      第二种方法就可以得到正确的结果

    在经过我们两个人的研究之后,发现,如果把交换的过程附在内层for循环,就需要在写一些继续扫描后面内容的代码以保证扫描的完整性

    • 问题2:将选择排序应用到数组里面
    • 问题2解决方案:
      自己写出来的代码和书上的范例差距不大
    public void selection(int[] data){
            int min;
            for(int i = 0; i<data.length; i++){
                min = i;
                for (int j=i+1;j<data.length;j++){
                    if(data[j]<data[min])
                        min = j;
                }
                exchange(data, min, i);
            }
        }
    
    • 问题3:将插入排序法应用到数组
    • 问题2解决方案:
      关于在条件的判断的方面相对于课本上的略显笨拙
    public void insertion(int[] data) {
            //插入排序
            for (int i = 0; i < data.length; i++) {
                int a = data[i];
                for (int j = i + 1; j < data.length; j++) {
                    if (data[j] < data[i]) {
                        int d = data[j];
                        int n = j;
                        while (n != i) {
                            data[n] = data[n - 1];
                            n--;
                        }
                        data[i] = d;
                    }
                }
            }
        }
    

    代码调试中的问题和解决过程

    • 问题:在编写算法复杂度-3中的最后一个代码的时候排序工作量太大。

    • 解决方案:优化代码,跳过排序的环节,降低复杂的

    • 这个是排序后在提取第一位和最后一位的思路,排序的代码之前就写好了,所以思路相对简单复杂度为O(n^2)

    public void qwer(int[] data){
            for (int i = data.length - 1; i >= 0; i--) {
                for (int j = 0; j < i; j++) {
                    if (data[j] > data[j + 1])
                        exchange(data, j, j + 1);
                }
            }
            System.out.println("The min:" + data[0]);
            System.out.println("The max:" + data[data.length - 1]);
        }
        public void exchange(int a[], int b, int c) {
            int qwe = a[b];
            a[b] = a[c];
            a[c] = qwe;
        }
    
    • 这个是简化后的代码,复杂度为O(n)
    public void asdf(int[] data){
            int min = data[0], max = data[0];
            for (int i = 0; i<data.length; i++)
                if (min<data[i])
                    min  = data[i];
            for (int i = 0; i<data.length; i++)
                if (min>data[i])
                    max  = data[i];
            System.out.println("The min:" + data[0]);
            System.out.println("The max:" + data[data.length - 1]);
        }
    

    代码托管

    结对及互评

    点评模板:

    • 博客中值得学习的或问题:
      • 叙述的问题很清晰,讲解很仔细
      • 在排版上黑界面中放一张白色为主体的有些突兀
      • 结构清晰

    本周结对学习情况

    • 20162319

    • 结对学习内容:
      研究选择排序法的代码表现形式

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

    这周是从我开始接触程序设计以来第一次出现了结对学习的落实。由于结对伙伴的缘故,以前大部分时间都是单打独斗和辅导。在辅导对方的时候,自己并未得到发展,只是加强巩固自己之前的基础,相对于结对学习提高要小不少。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 0/0 1/1 10/10
    第二周 ??/?? 1/2 15/25
    第三周 465/465 1/3 15/40

    参考资料

  • 相关阅读:
    模板类 & 虚函数
    Page Color (页面着色)
    修改静态库
    ElementUI 时间选择器
    自定义export
    vue组件
    ElementUI 表格
    ElementUI 分页
    数组方法分类
    Vue过滤数组副本
  • 原文地址:https://www.cnblogs.com/yangjingdian/p/7571273.html
Copyright © 2020-2023  润新知