文章目录

前言

伪代码的7个主要部分

1.算法名称

2.指令序列

3.输入/输出

4.分支选择

5.赋值

6.循环

7.算法结束

补充

举个例子

说明

前言

最近在复盘《算法设计与分析》这门课程的时候,发现老师写得一手漂亮的伪代码,着实羡慕不已,看他写其实已经知道大致写伪代码的规则,但本着严谨的态度,还是系统的学习和整理出来。在学习过程中,我们不可能将每一个算法都完完整整敲一遍,那么伪代码就可以很快捷和清晰的写出对一个算法的解决思路。

我在网上查到的博客中要么写的过于繁琐,要么就是没有实例,这也激起了我想要整理这篇文章的动力,若文章中有错误或者不足,希望大家指出。

伪代码的7个主要部分

算法名称

指令序列

输入/输出

分支选择

赋值

循环

算法结束

文章将从这7个部分依次进行说明

1.算法名称

有两种表示算法的伪代码:

过程(Procedure)

函数(Function)

过程和函数的区别是:

过程是执行一系列操作,不需要返回操作的结果,无返回数据。

函数是执行一系列的操作后,要将操作的结果返回,有返回数据。

简单来说二者就是有没有返回数据。

算法伪代码的书写规则:

Procedure ([])

Function ([])

2.指令序列

指令序列是算法的主体。

指令序列的书写规则:

用Begin作为开始,用End作为结束;

或者用“{”作为开始,用“/}”作为结束

例如:

Begin

指令序列;

End

或者

{

指令序列;

/}

说通俗一点就是类似于我们写C语言只要在{ }中的都是这个函数的指令序列。最后面会给一个完整的例子,方便理解

3.输入/输出

输入:Input

输出:Output 或Return

看个人的习惯吧,我输出一般用Return

4.分支选择

总体有两种分支,类似于C中的if语句 和if else语句用法是一样的,可以嵌套。

//第一种

If Then

{

指令序列;

/}

//第二种

If Then

{

指令序列1;

/}

Else

{

指令序列2;

/}

5.赋值

有两种 可以用:=或者作为赋值操作符,相当于C语言中的=

例如:

x:=x+1;

x

选择哪个,看自己的习惯吧

6.循环

两种方式:计数式循环(for循环)和条件式循环(while循环)。

(1)计数式循环

For 变量:=初值 To 终值

{

指令序列;

/}

循环次数:终值-初值+1

(2)条件式循环

While (条件) do

{

指令序列;

/}

7.算法结束

关键字End的后面加上算法名称,表示算法结束,是算法的最后一句。

例如:

End DFS

补充

除了这些,像运算符号* / + - %等等,都是和C语言用法一样

数组:

A[j]指示数组A的第j个元素。符号“ …”用来指示数组中值的范围。例如:

A[1…j]表示含元素A[1], A[2], … , A[j]的子数组;

还有个写法是A[0:n]表示数组下标从0开始一直到n

二维数组也是:A[0:m,0:n]

举个例子

例如冒泡排序的伪代码:

会发现伪代码的7大部分没有提到的内容是:

变量名 : 数据类型

还有var这是变量的意思,如果学过javascript应该会有比较深一点的理解,我在这里理解就是告诉读者,这是一个变量。

procedure Bubble(n:integer);

var temp,i,j:integer;

change:boolean;

begin

for i:=1 to n-1 do

begin

change:=false;

for j:=n-1 downto i do

if a[j]>a[j+1] then

begin

change:=true;

temp:=a[j]; a[j]:=a[j+1]; a[j+1]:=temp;

end;

if not(change) then exit;

end;

end;

再举个插入排序的例子

procedure insertsort(n:integer);

var i,j:integer;

begin

for i:=2 to n do

begin

a[0]:=a[i];

j:=i-1;

while a[j]>a[0] do

begin

a[j+1]:=a[j];

j:=j-1;

end;

a[j+1]:=a[0];

end;

end;

关于语句后面有没有分号,我看有些人说有,有些说没有,其实拟C伪代码可以加分号,这样看起来更习惯

说明

这个伪代码是算法比较规范的伪代码规则,我在网上查到有java的伪代码,python伪代码,php伪代码等等,和其他的,我的理解就是把没有完整实现的代码叫做了伪代码,其实只要能够清楚表达思路,让别人很容易理解,都可以称作伪代码吧。不受严格语法的约束,我想这也是伪代码写起来比较快乐的原因吧。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐