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

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

教材学习内容总结

查找

  • 1.查找:是一个过程,即在某个项目组中寻找某一项指定目标元素,或者确定该指定目标并不存在。
  • 2.静态方法:也称为类方法,可以通过类名来调用,无需实例化该类的对象。 在方法声明中,通过使用static修饰符就可以把他声明为静态的。
  • 3.泛型方法:要创建一个泛型方法,只需要在方法头的返回类型前插入一个泛型声明即可,其格式是:修饰符 返回类型 方法名(形参列表) { 方法体 }。例如:
    public static <T, S> int func(List list, Map<Integer, S> map) { ... }
  • 4.线性查找法:即从列表头开始依次比较每一个值,直至找到该目标元素或到列表尾未找到,这是一种最简单的查找方式,但它的效率并不是高效的。
  • 5.二分查找法:是在有序数组中用到的较为频繁的一种算法,就是不断将数组进行对半分割,每次拿中间元素和目标进行比较。
  • 6.分块查找:是折半查找和顺序查找的一种改进方法,分块查找由于只要求索引表是有序的,对块内节点没有排序要求,因此特别适合于节点动态变化的情况。分块查找要求把一个大的线性表分解成若干块,每块中的节点可以任意存放,但块与块之间必须排序。
  • 7.分块查找步骤:①先选取各块中的最大关键字构成一个索引表;②查找分两个部分:先对索引表进行二分查找或顺序查找,以确定待查记录在哪一块中;然后,在已确定的块中用顺序法进行查找。

排序

  • 1.排序:是一个过程,基于某一标准或升序或降序按某个规定的顺序排列。
  • 2.排序算法:①顺序排序。②对数排序。与查找算法一样,在n较小时两类算法间的差别较小。
  • 3.顺序排序:①选择排序法。②插入排序法。③冒泡排序法。
  • 4.对数排序:①快速排序法。②归并排序法。
  • 5.选择排序法:扫描整个列表找出最小值,将这个值与该列表第一处交换,再扫描剩下的列表找出最小值,将它与整个列表的第二处交换,以此类推。(代码需要用一个temp变量暂时存储最小值)
  • 6.插入排序法:通过反复地将某一特定值插入到该列表某个已排序的子集中来完成对列表值的排序。也就是先比较第一个数和第二个数,把第一个数和第二个数排好序之后,把第三个数与已排好的第一个数和第二个数进行比较然后插入进合适的位置,依此类推排完列表中的所有数。
  • 7.冒泡排序法:通过重复比较列表中的相邻元素,并在它们彼此不符顺序时将它们互换来完成对值的排序。也就是先把最大或最小的数放在恰当位置,之后再冒泡出倒数第二个值。
  • 8.快速排序法:通过使用一个任意选定的分区元素将该列表分区,然后对分区元素的任一边的子列表进行递归排序。
  • 9.归并排序法:通过将列表递归式分成两半直至每一子列表都只含有一个元素,然后将这些子列表按顺序重组。(若是奇数,则分解是后面比前面多一个。)
  • 10.基数排序法:基于排序关键字(排序基于某个特定的值)的结构。(就是先创建基数的队列,然后把数放进相应的队列中,通过不断的遍历找到最后的位置)
  • 11.基数:排序关键字的可能取值的个数(也就是每种排序关键字都会单独创建一个队列,最后的队列个数)。

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

  • 问题1:查找算法的比较
  • 问题1解决方案:

    1.线性查找可以针对任何数组,将数组中的每项依次遍历出来之后,与所要查找项对比。消耗时间也是不规律的,可能查找项处于数组的第一位,也可能处于数组的最后一位。还有可能数组中完全不存在需要查找的项目。

    2.二分查找法,针对有序数组使用。因为数组已经有序排列,可以通过将数组从中间分割,将中间项与所需查找项对比;然后再根据对比结果,再次向上或者向下,寻找中间项对比,直至完成查找。

    而且,对于查找最开始,可以通过与第一项和最末项的对比,确定查找项是否处于此数组中。

  • 问题2:五种排序的比较
  • 问题2解决方案:
  • 问题3:快速排序法的具体步骤是什么?到底怎么排序?
  • 问题3解决方案:

    1.先从数列中取出一个数作为基准数。
    2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
    3.再对左右区间重复第二步,直到各区间只有一个数。
  • 问题4:排序算法的稳定性的意义
  • 问题4解决方案:
    稳定性的定义:
    假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。
    常见算法的稳定性(要记住)
    堆排序、快速排序、希尔排序、直接选择排序不是稳定的排序算法,而基数排序、冒泡排序、直接插入排序、折半插入排序、归并排序是稳定的排序算法。
    稳定性的意义
    1、如果只是简单的进行数字的排序,那么稳定性将毫无意义。
    2、如果排序的内容仅仅是一个复杂对象的某一个数字属性,那么稳定性依旧将毫无意义(所谓的交换操作的开销已经算在算法的开销内了,如果嫌弃这种开销,不如换算法好了?)
    3、如果要排序的内容是一个复杂对象的多个数字属性,但是其原本的初始顺序毫无意义,那么稳定性依旧将毫无意义。
    4、除非要排序的内容是一个复杂对象的多个数字属性,且其原本的初始顺序存在意义,那么我们需要在二次排序的基础上保持原有排序的意义,才需要使用到稳定性的算法,例如要排序的内容是一组原本按照价格高低排序的对象,如今需要按照销量高低排序,使用稳定性算法,可以使得想同销量的对象依旧保持着价格高低的排序展现,只有销量不同的才会重新排序。(当然,如果需求不需要保持初始的排序意义,那么使用稳定性算法依旧将毫无意义)。

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

  • 问题1:==,equals和compareTo的区别?
  • 问题1解决方案:
    "equals": 比较的是两个字符串中的每个字符是否相同,例如:a="1243", b="1243",那么a.equals(b)就会返回TRUE,因为a和b两个字符串中的每一个字 符都相同,如果对a或者b中的任何一个做任何修改,equals()就会返回false。
    ”==":比较的是两个字符串是否同时引用的一个地址,如果 a=new String("abc");b=a;b引用的a, 所以a == b的比较就会返回TRUE。
    compareTo(): 这个函数的作用就是对两个字符串按字典排序的方式进行比较,返回两个字符串中第一个不同的字符的ascII码差值。
  • 问题2:给数组赋值时发现intinteger并不一样
  • 问题2解决方案:
    Integer 是 int 包装类,int 是八大基本数据类型之一
    Integer 是类,默认值为null,int是基本数据类型,默认值为0;
    Integer 表示的是对象,用一个引用指向这个对象,而int是基本数据类型,直接存储数值。
    

代码托管

上周考试错题总结

上周没有考试,所以没有错题。

点评过的同学博客和代码

  • 本周结对学习情况

    • 20182317
    • 20182318
    • 结对学习内容
      • 线性查找和二分查找
      • 选择排序、冒泡排序和快速排序
      • 对排序稳定性的讨论
  • 上周博客互评情况

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

本周主要学习了查找和排序。虽然这么说感觉很少,但是学的东西却一点都不少,查找和排序每个都有五六种反法要去学习,而且还要去理解每一种反法的思维模式。反正这一周很难!

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 10000行 30篇 400小时
第一周 56/56 2/2 20/20 主要学会了简单的操作Linux以及如何编写简单的java程序并将它上传到码云
第二、三周 331/407 3/5 23/43 学会了一些类和程序包的使用,也明白了C语言和Java在有些地方的区别
第四周 595/1002 2/7 20/60 学会了IDEA以及用IDEAgit码云,也学会了TDD测试
第五周 1621/2623 2/9 17/77 见识了服务器与用户链接的代码,也学习了继承的一些知识。
第六周 1770/4393 1/10 22/99 学习了多态以及与接口和继承的关系,还有就是对异常的学习和处理异常的方法以及自定义一个异常
第七周 1747/6140 3/13 23/122 学习了渐进复杂度的计算,栈和队列的学习,分别用数组和链表实现队列
第八周 384/6524 1/14 20/142 学习了一些查找和排序的算法,也学会了计算ASL
  • 计划学习时间:20小时
  • 实际学习时间:20小时
  • 改进情况:无

参考资料

原文地址:https://www.cnblogs.com/qianjiayu/p/11792861.html

时间: 2024-07-30 18:33:07

20182333 2019-2020-1 《数据结构与面向对象程序设计》第八周学习总结的相关文章

《数据结构与面向对象程序设计》第四周学习总结

20182304 2019-2020-1 <数据结构与面向对象程序设计>第四周学习总结 教材学习内容总结 1.本章我们学习了使用并编写我们自己的类:类中有与类同名的构造方法,也可以有set,get,toSring与自己定义的方法.实例化一个对象,可通过该对象使用类里的所有方法.实例数据是每次创造一个实例后自动生成新的内存空间的变量 2.uml类图 :每个类可能包含三部分内容:类名.属性.操作(方法).UML类图有属于自己的语法,变量的类型名在变量名的后面,它们之间用冒号作为分隔符,方法的+和-

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

20182306 2019-2020-1 <数据结构与面向对象程序设计>第五学习总结 教材学习内容总结 尽量简单的总结一下本周学习内容 尽量不要抄书,浪费时间 看懂就过,看不懂,学习有心得的记一下 教材学习中的问题和解决过程 问题1:XXXXXX 问题1解决方案:XXXXXX 问题2:XXXXXX 问题2解决方案:XXXXXX ... 代码调试中的问题和解决过程 问题1:XXXXXX 问题1解决方案:XXXXXX 问题2:XXXXXX 问题2解决方案:XXXXXX ... 代码托管 (stat

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

教材学习内容总结 1.编写类与方法(构造方法的结构和用途) 2.实际参数与形式参数.public与private.return与void的区别与含义. 3.UML类图的含义与形式 4.静态类(Math类)静态变量.静态方法 5.类间关系(依赖关系.聚合关系.继承关系) 6.接口的使用,能够在某个类中实现接口的方法(Comparable.Iterator) 7.软件活动开发.方法设计.方法重载.测试(黑盒测试.白盒测试) 教材学习中的问题和解决过程 问题1:toString与return返回的值的

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

教材学习内容总结 1.继承的基本语法与用法. 2.利用UML类图表示继承关系. 3.在具体编写类的时候,先是数据声明再是方法声明. 4.toString方法用println或print或字符串连接会自动调用. 5.每创建一个对象.都会为类中声明的变量建立新的内存空间. 6.UML图一些基础使用方法. 7.对象应该是自管理的,既对象的实例数据应该仅由该对象来修改,这就构成了封装. 代码调试中的问题和解决过程 问题1:测试代码出现错误 问题1解决方案:junit的方法名必须是textxxx或xxxt

20182333 2019-2020-1 《数据结构与面向对象程序设计》实验2报告

20182333 2019-2020-1 <数据结构与面向对象程序设计>实验2报告 课程:<程序设计与数据结构> 班级: 1823 姓名:钱佳禹 学号:20182333 实验教师:王志强 实验日期:2019年9月9日 必修/选修: 必修 1.实验内容 (1) 编写简单的计算器,完成加减乘除模运算. (2) 要求从键盘输入两个数,使用判定语句选择一种操作,计算结果后输出,然后使用判定和循环语句选择继续计算还是退出. (3) 编写测试代码,测试验证.(https://www.cnblo

20182333 2019-2020-1 《数据结构与面向对象程序设计》实验3报告

20182333 2019-2020-1 <数据结构与面向对象程序设计>实验3报告 课程:<程序设计与数据结构> 班级: 1823 姓名: 钱佳禹 学号:20182333 实验教师:王志强 实验日期:2019年9月23日 必修/选修: 必修 1.实验内容 参考<实验二 Java面向对象程序设计>:http://www.cnblogs.com/rocedu/p/6736847.html 实验内容 下载安装并使用IDEA,完成下面实验(https://www.cnblogs

# 20182333 2019-2020-1 《数据结构与面向对象程序设计》实验5报告

20182333 2019-2020-1 <数据结构与面向对象程序设计>实验5报告 课程:<程序设计与数据结构> 班级: 1823 姓名: 钱佳禹 学号:20182333 实验教师:王志强 实验日期:2019年10月14日 必修/选修: 必修 1.实验内容 1.Android Stuidio的安装测试: 参考<Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)>第二十四章: 参考http://www.cnblogs.

# 20182333 2019-2020-1 《数据结构与面向对象程序设计》第2、3周学习总结

20182333 2019-2020-1 <数据结构与面向对象程序设计>第2.3周学习总结 教材学习内容总结 第二章 1.字符串的概念以及拼接. 2.println方法和print方法的用法和区别 3.转义序列的概念和用法. 4.变量常量和赋值语句的相关内容. 5.8个基本数据类型. 6.表达式的概念,算数.自增自减.赋值三种运算符以及运算符优先级. 7.数据类型转换的安全性以及三种技术. 8.Scanner类的应用. 第三章 1.创建对象,对象引用变量的声明和与初始化,别名. 2.Strin

20182327 2019-2020-1 《数据结构与面向对象程序设计》实验二报告

20182327 2019-2020-1 <数据结构与面向对象程序设计>实验二报告 课程:<程序设计与数据结构> 班级: 1823 姓名:赵天昊 学号:20182327 实验教师:王志强 实验日期:2019年9月16日 必修/选修: 必修 1.实验内容 (1) 编写简单的计算器,完成加减乘除模运算. (2) 要求从键盘输入两个数,使用判定语句选择一种操作,计算结果后输出,然后使用判定和循环语句选择继续计算还是退出. (3) 编写测试代码,测试验证. 2. 实验过程及结果 不多说,上