20182312第八周学习总结
20182312 2019-2020-1 《数据结构与面向对象程序设计》第八周学习总结
教材学习内容总结
课本第13章
查找
线性查找:适用于小型和(或)没有排序的线性表,用关键字与线性表的每个元素进行比较。改进:可先设置哨兵,把第一个位置空出来,从后往前找,如果最后index= 0,未找到,这样可以不用把index每次和上下限比较。
折半查找:优点:效率高。特点:有序。缺点:只适用于顺序存储结构。
散列查找:思想:在记录的存储地址和它的关键字之间建立一个确立的对应关系。
排序
插入排序:未排序序列的第一个元素,插入到排序序列的适当位置。
选择排序:选取未排序序列的合适元素,安排在排序序列的最后位置。
交换排序:每次比较两个数据,然后交换位置。
归并排序:通过将列表递归式分成两半直至每一子列表都含有一个元素,然后将这些子列表归并到一个排序顺序中,从而完成对列表的排序。
基数排序:根据数据的个位数、十位数、百位数依序安排其数据位置,得到排序结果的过程。不需要数据的比较。
快速排序:是对冒泡排序的一种改进方法,元素每次移动的距离较远,因而总的比较和移动次数较少。
教材学习中的问题和解决过程
- 问题1:不理解老师上课所说的哨兵的意义,觉得只是改了个查找顺序,而且在序列满了之后用不了,十分鸡肋。
- 问题1解决方案:这个的作用主要是体现在这个查找代码的效率上,可以每次不需要和上限或者下限比较,从长远来看是对代码效率的一个很大的提升。
- 问题2:有关于上课老师所提到的稳定性是什么意思。
- 问题2解决方案:指的是在代码的运行过程中,以及结果中,两个相等的数字的前后关系保持不变。
代码调试中的问题和解决过程
- 问题1:在进行折半查找的过程中写完这个方法之后不会对其进行递归,因此后面的test代码也无法调用这个方法。
- 问题1解决方案:设置了一个mid用if条件判断控制情况,使得每次的end和start从不同的地方开始,使得每次的递归都是在进行一次折半查找。
- 问题2:在尝试编写快速排序代码的时候两头的指针很快的就相遇了,而数字的顺序却和正常的快速排序略有不同。
- 问题2解决方案:这是我理解的问题,我一开始理解的是指针从两头同时开始向中间移如果有左边大于所设定基数的就将其和右边小于所设定基数的数换个位置,但这个排序其实是两头指针轮流向中间移动,交换基数和符合要求数的位置,以此来达到排序效果。
代码托管
点评过的同学博客和代码
其他(感悟、思考等,可选)
自己学的算法感觉渣的一比,思路逻辑乱七八糟,很多逻辑完全靠自己想当然脑补,然后写出来的代码就经常做不到自己想完成的事,难受的要死。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 130/130 | 2/2 | 23/23 | |
第二周 | 451/581 | 3/5 | 42/67 | |
第三周 | 451/581 | 3/5 | 42/67 | |
第四周 | 617/1068 | 2/7 | 28/95 | |
第五周 | 632/1700 | 2/9 | 17/112 | |
第六周 | 666/2366 | 1/10 | 22/134 | |
第七周 | 1666/4032 | 3/13 | 42/178 | |
第八周 | 247/4279 | 1/14 | 3/181 |
-
计划学习时间:5小时
-
实际学习时间:3小时
-
改进情况:再重新看看算法。