那么在设计一个算法的时候
怎么描述这个算法
那你说我就写程序呗
可不是这样
如果一个算法没有想清楚 就去写程序
写出来的代码质量基本上是不高的
更有可能的是你压根就写不出来
也就是说这个问题必须在头脑中
就已经完全明确了应该如何去实现
如果不明确
那么这个算法就很难去真正编程
算法描述有很多种方案
其中最常用的为伪代码和流程图
伪代码就是一种混合自然语言
和计算机语言和数学语言的方式
描述算法的过程和步骤
第一步做什么 第二步做什么
总之 你怎么方便怎么来
自然语言也行 计算机语言也行
数学语言也行 混着来也行
你把这个事情讲清楚了
写出来它 这就叫伪代码
优点是什么呢 优点是方便
很容易能够表达设计的意图
能够清晰地描述算法的流程
而且也很容易修改
写的不对划掉重新换张纸再写
缺点在哪里 缺点就是不太美观
因为你一会儿是自然语言
一会儿是计算机语言
一会儿又是数学语言
或者全是自然语言 全是数学语言
全是计算机语言都有可能
你这么写在一起会不美观
别人看的话复杂的算法
就不太容易理解
这是伪代码
第二种方案就是流程图
俗称程序框图
它会有一些特殊的符号
用它来表示算法的执行过程
它优点在哪里呢 优点就是美观
算法表达是非常非常清晰的
缺点就是绘图
本来是为了要美观的
图如果直线画得歪歪扭扭的
它就看起来很丑了
反而还不如写伪代码了
所以它绘制很复杂 不容易修改
要真绘错了怎么办呢
你怎么擦啊 你要重绘
这么复杂的一个算法
那么多个框图 那么多个线
重新绘一遍要耗费大量时间的
所以实际上效率就不高
而且它占用的篇幅很大
有的复杂算法 一张A4的纸
那才210乘上297毫米
很小的一张纸
你要绘这个算法能绘完吗
简单的算法也许成
复杂的算法压根就绘制不完
那我怎么办呢 我换成A3的纸
比它大一倍 成吗 不成
到最后换成A0的纸成吗
好大的一张纸 一米多宽 还是不成
有的复杂算法
我告诉你需要多大的纸呢
需要一张足球场那么大的纸
才能把这个算法绘制完
我怎么去绘它
万一绘错了怎么去修改它
得多大的工作量
所以这种情况
绘制算法流程图的时候
往往都是我们算法都设计完了
最终形成设计文档给别人看的时候
这样绘制觉得漂亮
给别人看 印象深刻
平时写程序的时候
往往使用的都是伪代码
那么在程序里面
伪代码表示的方式非常自由
觉得哪一种方案你比较习惯
你就按照什么方案来表达
比如 顺序结构
如果你能够分解出任务一、任务二
或者任务A、任务B
第一步做什么 第二步做什么
你把它描述清楚就OK了
如果你知道它是个分支结构
或者说你想明确分支结构
所有条件和分支要做什么
那你就可以写if条件表达式
如果是个switch
那就按照switch这种格式写
如果你不是特别了解
当时还没有这么详细
那么你不写它其实也可以
循环结构也一样
如果你知道就描述出来
如果你不知道
或者说不想描述那么清晰
只是描述一个大概
那么不这么写也行
就是用一个自然语言 数学语言
计算机语言 你混合着描写
只要你把这个算法说清楚就行了
至于它是主体框架清晰
还是细节全部清晰 由你
总之你会在此基础上不断地去扩展它
直到它最终完全清晰
可以编写程序就够了
也就是说 书写的过程是自由的
接下来就是流程图
流程图呢 它是有一些固定的符号的
就这么8个符号
常用的是三个
一个是方框 我们称它为处理框
然后是一个条件判断
是一个菱形框 还有一个流程线
这是三个最重要的流程图的记号
像准备、终止、预定义处理、
数据输入输出 这四个呢
严格讲起来必须有
但是真的没有也成
还有一个地方 就那个小圈圈
虽然我们画流程图的时候
可能很少用到
但是真要用到的时候
同学们一定要记住它是个连接符
就是一张纸绘不完我们的流程图怎么办呢
那我们就要分成两张纸
那这两张纸的流程
从哪个地方拼接起来
连接符就干的这个事情
它要完成流程的拼接
我们的幻方流程图
就可以按照这个方式去画
内容里面写的东西并不是特别严谨
我用汉字写的
从开始然后第一步做什么
接下来做什么
你看它的流程 如果这个条件判断
右肩格是不是超出了范围
如果是 就要平移
如果不是我就直接朝那边写了
那么这个过程会出来一个
是和否的一个分支结构
是和否 或者true和false
或者t或f 随便你
反正你要写在那个流程线上
知道这个方式就行了
按照这个方式去绘制流程图
这是幻方
如果是第二个例子
那就是查字典的
这个图其实比刚才还复杂
如果是竖着排的话我排不完
那怎么办呢 我就把它分割成了两半
分割成两半以后
我就要用连接符把它连接起来
因为它不是两个框图
它实际上是一个框图
要从这个地方出来一个否分支的时候
进入一个小圆圈
里面写了一个记号1
这边就从这个1进来
这就意味着这两个流程图
通过1号连接符 连接成了一个
如果你的图很复杂 有很多个连接符
那就是1号连接符、
2号连接符、3号连接符
里边的数字随便你写
只要你知道
它是能从什么地方连接到什么地方