20172304 《程序设计与数据结构》第五周学习总结

教材学习内容总结

本博客图片纯属网络资源如有雷同纯属巧合。
来源:百度图片。
本章主要对查找和排序的相关问题进行了讲解。并介绍了几种较为常用的查找和排序方法。
查找:从某个项目组中寻找指定目标元素,或者确定该组中并不存在该目标元素。
查找池:对其查找的项目组。
从算法的角度来说,我们希望最小化比较操作的次数。
9.1.1静态方法
静态方法又称类方法,可以通过类名来激活。可以不必使用实例化来调用方法。声明方法时使用static修饰符就可以将方法声明为静态的。
泛型方法要创建泛型方法,只需在方法头的返回类型前插入一个泛型声明就可以了。例如

public static <T extends Comparable<T> boolean>linearSearch (T[] data, int min, int max, T target)

9.1.3线性查找法
线性查找: 从该列表头开始一次比较每一个值,知道找到该目标元素。
线性查找示意图

9.1.4 二分查找法
二分查找是从排序列表的中间开始查找,如果没有在那个中间元素找到目标元素,则继续查找。通过比较削减一般的查找池,剩下的一半查找池将表示为可行候选项,以相同方式继续查找,每一次比较都会将可行候选向削减一半,直至最终找到目标元素,或者不再存在可行候选项。
二分查找示意图

9.2 排序
排序:基于某一标准,要么一圣墟要么已将徐将某一组项目按照某个规定顺序排列。
基于效率排序算法通常也分为两类:
顺序排序:他通常使用一对嵌套循环对n个元素排序,需要大约n²次比较;以及对数排序,它对n个元素进行排序通常需要大约nlog₂n次比较。
9.1.2 选择排序法
选择排序算法的一般策略如下:扫描整个列表以找到最小值。将这个值与该列表第一个位置处的值交换。扫描(除了第一个值的)剩余部分列表并找出最小值,然后将它和该列表第二个位置处的值进行交换。扫描(除了前两个值的)剩余部分列表并找出最小值,然后将它和该列表第三个位置处的值交换。对列表中每一个位置继续该过程。当这一过程结束后,列表也就已经排好序了。
选择排序示意图

9.2.2 插入排序法
对列表的头两个值依据其相对大小对其及逆行排序,如果有必要则将它们互换。将列表的第三个值插入到头两个(已排序的)值中的恰当位置。然后将第四个值插入到列表头三个值中的正确位置。每做出一次插入,该排序子集中的值数目就会增加一个。继续这一过程,直至列表中的所有元素都得到完全排序。
插入排序示意图:

9.2.3 冒泡排序法
扫描该队列且比较邻接元素,如果它们不是按相对顺序排列则将其互换。这就像把最大值“冒泡”到列表的最后位置,这是它在最终已排序列表中的恰当位置。然后再次扫描该列表,冒泡出倒数第二个值。继续这一过程,直至所有元素都被冒泡到它们正确的位置。
冒泡排序示意图:

9.2.4 快速排序法
首先选择一个列表元素作为分区元素。下一步,分割该列表,时的小于该分区元素的所有元素位于该元素的左边,所有大于该分区元素的元素位于有表。最后,将该快速排序策略(递归式)应用于两个分区。
快速排序法示意图:

9.2.5 归并排序法
首先将列表分为两个大约相等的部分,然后对每一个部分列表递归调用其自身。继续该列表的递归分解,直至达到该递归的基本情形,这是该列表被分割成长度为1的列表。
归并排序法示意图:


9.3 基数排序法
基数排序的大致思路有点像投桶,就是将先按照个位搜集数据然后在按照十位数搜集数据以此类推最终按顺序输出。

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

问题:各种排序的应用场景
问题解决方案:
冒泡排序
冒泡排序重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说排序完成。规模比较小的时候应用冒泡排序,主要应用于教学。。。
选择排序--只会移动N次
 选择排序的主要思想:首先找到数组中最小的那个元素,其次,将它和第一个元素交换。接下来找第二小和第二个交换。运行时间和输入无关,数据移动最少。当数据量较小的时候适用。
插入排序
时间复杂度为O(n^2),数据量小时使用。并且大部分已经被排序。
快速排序
 快速排序是最快的通用排序算法,在大多数实际情况中,快速排序是最佳选择。在java的默认排序中是使用的是三向切分排序。
归并排序
如果需要稳定,空间不是很重要,请选择归并。
O(n)时间复杂度的基数排序 
当范围已经知道,而且空间不是很重要的情况下使用基数排序。
---------------------
作者:li563868273
来源:CSDN
原文:https://blog.csdn.net/li563868273/article/details/51200876
版权声明:本文为博主原创文章,转载请附上博文链接!

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

  • 问题1:在完成课后作业pp9.2,即在书上冒泡排序的代码的基础上进行编写间隔排序时,发现有一个元素不能正常的进行排序。问题如图。

    很明显在运行结果的界面中可以观察到20172304这个元素并没有正常的进行排序。
  • 问题1解决方案:后来我查看了改写后的方法,然后认为是循环条件使循环少进行了。


    于是我将第一张图片的最后一行代码中的position>1改为了position大于0;然后进行了运行结果如图所示是正常的。
  • 问题2:在进行统计各种排序方法的比较次数与运行时间时,我是直接实例化一个Integer型数组,然后通过不同的Integer变量对实例化的数组进行引用,然后在进行排序。但是我发现插入排序的比较次数与选择排序的比较次数相比明显很小。
  • 问题2解决方案:我将main函数中的对其他排序方法的调用都注释掉了,然后对整个main函数进行了单步调试,发现最后得到的比较次数是28次,这时,我想到会不会是引用变量的改变引起了被引用对象的改变、于是我就先声明了若干个Integer对象,然后在逐个进行实例化,最后在进行调用,发现这样就没有问题。

  • 问题3:在进行归并排序和快速排序的统计中我遇见了问题,因为这两个方法是通过递归实现的。
  • 问题3解决方案:
    我写了几个方法进行统计

    代码托管

上周考试错题总结

  • 错题1:
  • 错题一解析:这道题说的是接口不可以派生接口,这是错的,我应该是看错了所以才选的true。

    博客互评

    20172304郭恺同学本次的博客十分优秀,对教材的总结详略得当,而又针对自己在教材中发现的问题进行了深入的鞭辟入里的思考与解答。整个过程看起来赏心悦目给人一种美的享受。
    20172328李馨雨同学的博客十分的完整与丰富,体现了她认真的学习态度。

点评过的同学博客和代码

  • 上周博客互评情况
    20172301 郭恺同学本次博客十分简洁,对教材的内容概括的十分精炼,总体篇幅较短。
    20172328 李馨雨同学这次的博客中规中矩,没有特别出彩的地方,但是结构完整。

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

    本周又经过了充分的学习与思考,整合与联系。又不断地充实了自己,希望在老师的引领下,能学到更多更好的有用的知识。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 30/30 1/1 10/10
第二周 766/796 1/2 40/50
第三周 817/1613 1/3 20/70
第四周 1370/3983 2/5 30/100
第五周 1235/5214 1/6 10/110

参考资料

1.蓝墨云班课
2.java软件结构与数据结构
3.java如何计算运行程序时间
4.各种排序的应用场景

转载于:https://www.cnblogs.com/15248252144dzx/p/9800704.html

20172304 《程序设计与数据结构》第五周学习总结相关推荐

  1. 20172304 《程序设计与数据结构》第九周学习总结

    20172304 <程序设计与数据结构>第九周学习总结 教材学习内容总结 本章是第十五章,主要介绍了图的概念. 首先我来介绍一下图的基本结构. 从逻辑上讲,图是由边和结点组成的,在我的理解 ...

  2. 20172304 《程序设计与数据结构》 第二周学习总结

    20172304 <程序设计与数据结构>第二周学习总结 教材学习内容总结 本周主要学习了第三章和第四章的内容 第三章 集合概述--栈 3.1集合 集合是一种聚集组织了其他对象的对象. 集合 ...

  3. 20172315 2017-2018-2 《程序设计与数据结构》第九周学习总结

    学号 2017-2018-2 <程序设计与数据结构>第九周学习总结 教材学习内容总结 异常是定义一个非正常情况或错误的对象,由程序或运行时环境抛出. 异常与错误不同,错误代表不可恢复的问题 ...

  4. 20162329张旭升 2016-2017-2 《程序设计与数据结构》第九周学习总结

    20162329张旭升 2016-2017-2 <程序设计与数据结构>第九周学习总结 教材学习内容总结 1.建立数据库连接:我们是通过老师给的XAMPP程序来配置自己的数据库,然后根据教程 ...

  5. 20162302 《程序设计与数据结构》第一周学习总结

    20162302 2017-2018-1 <程序设计与数据结构>第一周学习总结 教材学习内容总结 很多情况下时间和空间不可兼得.在不同的情况下,要么用时间换空间,要么用空间换时间. 引出算 ...

  6. 20162329 2017-2018-1 《程序设计与数据结构》第九周学习总结

    第九周学习总结 一.学习目标 二叉查找树的理解 二叉查找树的实现 平衡二叉查找树 哈夫曼树的实现 堆的理解 堆的实现 二.学习内容 1.二叉查找树 思路: 二叉查找树与一般二叉树的区别在于,二叉查找树 ...

  7. 20162330 2017-2018-1《程序设计与数据结构》第二周学习总结

    2017-2018-1 学习总结目录: 1 2 3 5 6 7 9 10 11 12 目录 0. 本周学习内容总结 0.1 Comparable接口与Comparator接口的使用 0.2 泛型方法设 ...

  8. 20172323 2017-2018-2 《程序设计与数据结构》第九周学习总结

    教材学习内容总结 本周学习第十一章异常和第十二章 第十一章-异常 异常是一个定义非正常情况或错误的对象,由程序或运行时环境抛出,可以根据需要进行相应的捕获和处理. 错误和异常都是对象,代表非正常情况或 ...

  9. 20162303《程序设计与数据结构》第一周学习总结

    学号 2016-2017-2 <程序设计与数据结构>第1周学习总结 教材学习内容总结 本周学习了基本的JAVA知识,虽然比较基础,但是在实际过程中还是出现了许许多多的问题,代码一遍遍的敲错 ...

  10. 20172314 2018-2019-1《程序设计与数据结构》第一周学习总结

    教材学习内容总结 概述 软件工程:是一门关于高质量软件开发的技术和理论的学科,用来控制开发过程,实现高质量的软件. 软件工程的目标:正确性.可靠性.健壮性.可用性.可维护性.可重用性.可移植性.运行效 ...

最新文章

  1. 文本信息检索基本知识【转】
  2. Facebook悄悄参加星际AI大赛,然后输了 | 中国团队夺得第四
  3. laravel中的ORM模型修改created_at,updated_at,deleted_at三个时间字段类型
  4. 面试题02.07.链表相交
  5. 1002 写出这个数 (20 分)—PAT (Basic Level) Practice (中文)
  6. 21.MySQL 性能优化
  7. 程序员应具备的素质[转帖]
  8. 【优化算法】黑寡妇优化算法(BWOA)【含Matlab源码 1446期】
  9. 重载前自增运算符和后自增运算符
  10. 虚拟机启动失败/检查打开虚拟化-解决方案小结
  11. 2020 Java 全栈工程师进阶路线图,不可错过
  12. 德勤财务机器人正式上岗,工作视频曝光,效率惊人
  13. 浙大博士 130 页论文,教你用人工智能挑西瓜
  14. Gitter+Sidecar制作聊天室
  15. 3D旋转相册(附源码+素材)
  16. buuctf————[羊城杯 2020]login
  17. PowerDesigner 模型生成转化为sql脚本
  18. mysqllongblob
  19. 爬取集思录可转债成交额
  20. GoJS滚动表格的使用

热门文章

  1. 产品研发项目管理软件哪个好? 1
  2. Flash闪存颗粒和SSD知识深度解析
  3. 中国机读目录格式(CNMARC)
  4. zabbix监控系统
  5. 11月27日“软件开发模式思考:传统与敏捷 我们在什么位置?”的主题活动成功举办
  6. 有什么软件可以测试游戏视频数据,免费录制游戏视频软件有哪些?看完你就知道了...
  7. 高等数学-考试常用的三角函数公式
  8. 学会忘记其实是一种美德
  9. 为什么要使用Tomcat?
  10. 【Unity3D】动态路障导航