20162302 2017-2018-1 《程序设计与数据结构》第三周学习总结
教材学习内容总结
选择排序
插入排序 冒泡排序 快速排序 归并排序教材学习中的问题和解决过程
- 问题1:和结对伙伴在对于教材上的选择排序的工作原理产生争执,事后发现是在交换数据位置的时间上有分歧。
- 一种理解是交换位置套在最内层for循环
- 另一种理解是套在外层for循环
问题1解决方法:
具体的方法就是调用观察运行结果 第一种方法可以看到出了一个非常明显的错误 第二种方法就可以得到正确的结果在经过我们两个人的研究之后,发现,如果把交换的过程附在内层for循环,就需要在写一些继续扫描后面内容的代码以保证扫描的完整性
- 问题2:将选择排序应用到数组里面
- 问题2解决方案: 自己写出来的代码和书上的范例差距不大
public void selection(int[] data){ int min; for(int i = 0; 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; idata[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 |