1.3.3 算法描述方法
当算法过程比较复杂时,单靠自然语言来描述算法将显得十分困难,让人难以准确理解。此时,需要借助其他的算法描述手段,主要有:
· 算法语言,有伪代码、各种程序设计语言、计算机语言等。
· 图形描述,如流程图和N-S图,图的描述应与算法语言的描述对应。
· 形式语言,用数学的方法,可以避免自然语言的二义性。
1.伪代码
伪代码是介于程序语言和自然语言之间的算法描述,即要具有自然语言通俗易懂的特点,还要能很容易地被转换为程序语言,这就要求伪代码具有清晰的逻辑结构,并且有准确的算法步骤。伪代码的形式有很多种,没有通用的规则,可以根据需要自行决定伪代码的形式。本书使用的伪代码一般为类C伪代码,书写注重可读性和逻辑性。下面是1.3.2节直接排序算法的伪代码。该段伪代码已经细化到编程的每一小步,可以很容易地使用C语言代替。
算法开始: 设i值为0; 当i < N -1 { 设j值为i+1; 设min等于i; 当j < N { 如果stuArray[min] > stuArray[j] { 设min的值为j; } j自增1; } 交换第i个元素和第min个元素; i自增1; } 算法结束
技巧:在编程时,当设计好一个算法后,都要先将它们使用伪代码描述出来,再使用程序语言来实现。这样有利于更有条理更有逻辑地书写程序语言,其作用就像写文章要先列好提纲一样。
2.程序流程图
程序流程图是算法的图形描述方式。它使用一些简单的几何图形来表示各种不同性质的程序操作,使用流程线将各个图形连接起来,指示算法的执行过程。由于流程图的符号统一,且画法简单、结构清晰、逻辑性强、便于理解,因此,成为描述程序流程的主要方法。图1-12 中的图形是流程图中常用的一些标志。
在1.3.1节介绍三种基本程序结构时,已经接触了流程图的部分图形。将1.2.2节中的直接排序算法使用流程图来表示,如图1-13所示。
图1-12 流程图常用的图形标志
图1-13 直接排序算法的程序流程图
由于本书中的程序都较短小,而程序流程图描述小型程序时,能够发挥其简单灵活的优势,因此,本书主要使用程序流程图来描述算法流程。
3.N-S流程图
由于程序流程图是使用流程线的导向来引导程序流程。当程序流程较复杂时,框图中常常会有很多的流程线,导致逻辑杂乱无章,失去了流程图简洁清晰的优点。后来,当结构化程序设计方法日益流行后,两个美国学者I.Nassi和B.Shneiderman基于结构化思想,提出了一种新的流程图形式,被称为N-S流程图,“N”和“S”是两个发明人名字的首字母。按照结构化设计的思想,所有的程序都可以分解成三种基本结构的组合。N-S流程图为三种基本结构设计了特殊的结构图,并以它们为基础来描述其余所有的算法。
· 图1-14为顺序结构的N-S表示图。先执行操作1,再执行操作2;操作1的方框上方为结构入口,操作2的方框下方为结构出口。
· 图1-15为双选择结构,省略其中之一即可得到单选择结构。
· 图1-16为while循环结构。
· 图1-17为until循环结构。
图1-14 N-S顺序结构
图1-15 N-S双选择结构
图1-16 N-S while循环结构
图1-17 N-S until循环结构
使用这几种图形的组合便可以得到所有算法的N-S流程图。所以,N-S流程图中去掉了程序流程图中眼花缭乱的流程线,并将整个程序流程放在一个大方框内,使程序流程更清楚。图1-18是直接排序算法的N-S流程图。
图1-18 直接排序算法的N-S流程图