20182308 华罗晗 2019-2020-1 《数据结构与面向对象程序设计》第8周学习总结
20182308 2019-2020-1 《数据结构与面向对象程序设计》第8周学习总结
教材学习内容总结
本章内容基本分为查找和排序两个部分,
查找部分主要分为以下四种:顺序查找,折半查找、二叉排序树查找、散列查找;
而排序部分分为以下几种:选择排序、冒泡排序、快速排序、二叉排序。
主要讲了这些内容的数据结构原理性知识。
教材学习中的问题和解决过程
- 问题1:什么是归并排序,归并函数有什么存在的必要?
- 问题1解决方案:按照课本的说法,归并排序就是,将链表一直拆分一直拆分,直到子链表中只剩下一个单位为止。把剩下的元素调用递归的算法,再合并为一个有序的数列。这是一种比较高效稳定的算法,相比起快速排序来说,哪怕划分元素选得不好,它也能够达到O(nlogn)的复杂度,所以说是比较稳定的。
- 问题2:二叉排序树是什么,二叉排序树的图要怎么画?
- 问题2解决方案:二叉排序树就是一种比较特殊的排序方式,画法和代码实践的理念都是“大的放在右,小的放在左”,按照要求第二个、第三个数字要分别放在第一个数的左边(left)和右边(right)。在代码实践的过程中,可以通过创建指针链表来实现。
代码调试中的问题和解决过程
- 问题1:在我们不需要写出代码来实践的时候,有什么快速实现简单数列的排序的方法吗?
- 问题1解决方案:其实这个问题首先是在上个星期的查找中发现的,折半查找法要求在一个有序数列当中进行查找。int类被实例化的数据数组有一种自带的功能就是.sort,比如数组名叫xa[],那么我们只要进行xa.sort()就可以了。这个方法可以根据数组的复杂程度进行排序。在我们只需要对简单的数组进行排序的时候这样做是很高效的。
- 问题2:散列排序(哈希函数)要如何进行代码实现?
- 问题2解决方案:核心代码如下:
public HashTable(int size){
arraySize = size;
hashArray = new DataItem[arraySize];
nonItem = new DataItem(-1);
}
public void displayTable(){
System.out.print("Table:");
for(int i=0;i<arraySize;i++){
if(hashArray[i] != null){
System.out.print(hashArray[i].getKey() + " ");
}else {
System.out.print("** ");
}
}
System.out.println();
}
public int hashFunc(int key){
return key%arraySize;
}
public void insert(DataItem item){
int key = item.getKey();
int hashVal = hashFunc(key);
while (hashArray[hashVal] != null && hashArray[hashVal].getKey() != -1)
{
hashVal ++;
hashVal = hashVal%arraySize;
}
hashArray[hashVal] = item;}
可见哈希函数要实现并不难,根据开放定址法的思想创建一个数组,通过判断这个位置是否为空、循环来进行实现。
代码托管
上周考试错题总结
上周没有考试。
点评过的同学博客和代码
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 6000行 | 30篇 | 400小时 | |
第一周 | 101/101 | 2/2 | 23/23 | 了解了一些Linux系统操作入门、学会了基本的JDB调试操作 |
第二、三周 | 353/441 | 3/5 | 42/67 | 能够基本记住Java代码编程中的格式代码。了解了一些有关方法的特殊命令(比如substring)。了解了一些有关类的基本知识。 |
第四周 | 327/768 | 2/7 | 28/95 | 基本已经适应IDEA的基本功能 |
第五周 | 807/1575 | 2/9 | 17/112 | 基本能够理解继承的作用和用法,初步了解了接口的代码原理,能够正确分析优秀同学的代码思路 |
第六周 | 1015/2590 | 1/10 | 22/134 | |
第七周 | 1199/3789 | 3/13 | 42/176 | |
第八周 | 825/4614 | 1/14 | 22/198 |
-
计划学习时间:25小时
-
实际学习时间:22小时
-
改进情况:与上周类似,可以调用一些学习时间在纸上,理论学习和代码实践有机结合。
参考资料
posted on 2019-11-04 16:38 20182308hlh 阅读(115) 评论(0) 编辑 收藏 举报