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]);
}
代码托管
结对及互评
点评模板:
- 博客中值得学习的或问题:
- 叙述的问题很清晰,讲解很仔细
- 在排版上黑界面中放一张白色为主体的有些突兀
- 结构清晰
本周结对学习情况
-
结对学习内容:
研究选择排序法的代码表现形式
其他(感悟、思考等,可选)
这周是从我开始接触程序设计以来第一次出现了结对学习的落实。由于结对伙伴的缘故,以前大部分时间都是单打独斗和辅导。在辅导对方的时候,自己并未得到发展,只是加强巩固自己之前的基础,相对于结对学习提高要小不少。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/0 | 1/1 | 10/10 | |
第二周 | ??/?? | 1/2 | 15/25 | |
第三周 | 465/465 | 1/3 | 15/40 |