2018-2019-20172321 《Java软件结构与数据结构》第五周学习总结
教材学习内容总结
第9章 排序与查找
9.1查找

- 平均查找长度: 1/2(n+i)
- 时间复杂度: O(N)
- 9.1.4二分查找法
- 二分查找是从排序列表的中间开始查找,而不是从一端或另外一端开始。若是没有在那个中间元素找到目标元素则继续查找。
- 二分查找将利用查找池中的项目组是已排序的这一事实。
- 示意图


- 平均查找长度: (n+1/n)*(log2(n+1))-1
- 时间复杂度: O(logN)
- 查找算法的比较
- 二分查找的每次比较都会删除一半的可行候选项
- 二分查找的复杂度是对数级的,这使得它对大型查找池很是有效率
9.2排序
- 排序是这样一个过程,即基于某一标准,要么以升序要么以降序将某一组项目按照某个规定顺序排列。
- 顺序排序:选择排序、插入排序、冒泡排序
对数排序:快速排序、归并排序java
- 9.2.1选择排序法
- 选择排序算法经过反复地将某一特定值放到它在列表中的最终已排序位置,从而完成对某一列值的排序。
- 时间复杂度:O(n^2)
- 示意图


- 9.2.2插入排序法
- 插入排序算法经过反复的将某一特定值插入到该列表某个已排序的子集中来完成对列表值的排序。
- 时间复杂度:O(n^2)
- 示意图

- 9.2.3冒泡排序法
- 冒泡排序算法经过重复的比较相邻元素且在必要时将他们互换,从而完成对某个列表的排序。
- 时间复杂度:O(n^2)
- 示意图

- 9.2.4快速排序法
- 快速排序算法经过将列表分区,而后对这两个分区进行递归式排序,从而完成对整个列表的排序
- 时间复杂度:O(nlgn)
- 示意图(快速排序(Quicksort)是对冒泡排序的一种改进。)

- 9.2.5归并排序法
- 归并排序算法经过将列表递归式分为两半直至每一字列表都含有一个元素,而后将这些字列表归并到一个排序顺序中,从而完成对列表的排序。
- 时间复杂度:O(nlgn)
- 示意图

教材学习中的问题和解决过程
代码调试中的问题和解决过程
- 问题1和解决方案:首先我将pp9.2的i设定为3,而后开始编写,运行以后能够正确,可是我眉头一皱发现有两个地方并不简单,首先按照我这样的方法,若是把i改为其余的就会排序错误或者报错

同时我还发现,若是按照我如今的思路,好像运行到后来和冒泡排序就没有区别了,我再一看题,才发现是减小某个大于1的数算法

我这样写问题就很大了,最后我又加了一层循环数组

可是数据结构

最后我把 for (scan = 0; scan <= data.length - i; scan++)
的<+改为=才解决问题学习

上周考试错题总结
好像没有错题,嘿嘿嘿ui
结对及互评
- 博客中值得学习的或问题:
- 优势:代码编写时遇到的问题记录很是详细;对书本上的内容理解也到位;这周的博客不只交的早,质量是极高。
- 本周结对学习状况
其余(感悟、思考等,可选)
学习进度条
目标 |
5000行 |
30篇 |
400小时 |
|
第一周 |
0/0 |
1/1 |
8/8 |
|
第二周 |
671/671 |
1/2 |
17/25 |
|
第三周 |
345/1016 |
1/3 |
15/40 |
|
第四周 |
405/1421 |
2/5 |
23/63 |
|
第五周 |
1202/2623 |
1/5 |
20/83 |
|
参考资料