教材学习内容总结
Polya如何解决问题,学习了不同的算法,了解了不同的排序方法并尝试使用。了解了几个重要思想。
教材学习中的问题和解决过程
问题1:对各种排序算法略有混淆,希望能分清。
解决方案:在博客园上找到了相关文章,首先分清了冒泡排序和选择排序https://www.cnblogs.com/Good-good-stady-day-day-up/p/9055698.html
冒泡排序:从左到右或从下到上,数组中相邻的两个元素进行比较,将较大的放到后面或上面。
选择排序:从第一个位置开始比较,找出最小的,和第一个位置互换,开始下一轮。
关于改进方面,在看有关改进冒泡排序的文章里看到了一种改进方法:双向冒泡。不同之处在于“从左至右与从右至左两种冒泡方式交替执行”,但有人认为不能提高算法效率并且增加代码复杂度。https://www.cnblogs.com/heyuquan/p/bubble-quick-sort.html在此篇博客里看到了快速排序的改进方法及代码实现。
我另外找到了一篇介绍各种算法程序比较全面的文章https://www.cnblogs.com/wolf-sun/p/4312475.html
问题2:对伪代码的写法不是特别明晰
解决方案:查了资料,总结如下
1.在伪代码中,每一条指令占一行(else if,例外)。指令后不跟任何符号(Pascal和C中语句要以分号结尾)。
2.书写上的“缩进”表示程序中的分支程序结构。这种缩进风格也适用于if-then-else语句。用缩进取代传统Pascal中的begin和end语句来表示程序的块结构可以大大提高代码的清晰性;同一模块的语句有相同的缩进量,次一级模块的语句相对与其父级模块的语句缩进。
例如:
line 1
line 2
sub line 1
sub line 2
sub sub line 1
sub sub line 2
sub line 3
line 3
3.在伪代码中,通常用连续的数字或字母来标示同一即模块中的连续语句,有时也可省略标号。
4.赋值语句用符号←表示,x←exp表示将exp的值赋给x,其中x是一个变量,exp是一个与x同类型的变量或表达式(该表达式的结果与x同类型);多重赋值i←j←e是将表达式e的值赋给变量i和j,这种表示与j←e和i←e等价。
5.选择语句用if-then-else来表示,并且这种if-then-else可以嵌套
例如:
if (Condition1)
then [ Block 1 ]
else if (Condition2)
then [ Block 2 ]
else [ Block 3 ]
6.循环语句有三种:while循环、repeat-until循环和for循环,其语法均与Pascal类似,只是用缩进代替begin - end;
例如:
- x ← 0
- y ← 0
- z ← 0
- while x < N
- do x ← x + 1
- y ← x + y
- for t ← 0 to 10
- do z ← ( z + x * y ) / 100
- repeat
- y ← y + 1
- z ← z - y
- until z < 0
- z ← x * y
- y ← y / 2
7.伪代码可以用英文、汉字、中英文混合表示,以便于书写和阅读为原则。用伪代码写算法并无固定的、严格的语法规则,只要把意思表达清楚,并且书写的格式要写成清晰易读的形式。
问题3:记不住书上的概念
解决方案:常翻书,类比记忆或者通过做题来记概念