算法中的伪代码语法格式 - 算法实现表达利器

悬浮侠
• 阅读 2127

@[toc]
伪代码 pseudo-code,是一种非正式的,类似自然语言,用于描述模块结构图的语言。对于熟练不同编程语言的程序员要理解其他编程语言编写的功能时很困难,而伪代码清晰、简单、可读性好,可将整个算法运行过程的结构用接近自然语言的形式描述出来。伪代码不关心软件工程的问题,常忽略数据抽象、模块性、错误处理的问题。

作者简介:常遇,现阿里巴巴高级技术专家。关注“全栈深入”微信公众号并回复 “全栈图谱”
下载高清全栈知识图谱压缩包。全栈深入提供全栈知识分享,包含不限于前端开发、后台开发、机器学习、云计算等。如需转载本文请注明作者:常遇 及
来源:“全栈深入”微信公众号。

1、操作类型

操作类型符号示例
分配← 或 :=c ← 2πr, c:= 2πr
比较=, ≠, <, >, ≤, ≥
算术+, −, ×, /, mod
上界/下界⌊, ⌋, ⌈, ⌉a ← ⌊b⌋ + ⌈c⌉
逻辑and, or
总和、乘积∑ ∏$$h ← ∑_{a∈A}1/a $$

x and y,当x成立时才会对y求值,否则x将短路,不再对y求值
x or y,当x成立时才会y求值,否则x将短路,不再对y求值

2、语法规则

1、每一条指令占一行(else if除外)
2、指令后不跟任何符号
3、用缩进表示块结构、分支结构,代替begin..end、if-then-else语句

3、组成部分

3.1 算法名称

过程:Procedure,执行一系列操作,不需返回结果,无返回数据
函数:Function,执行一系列操作,需返回结果,有返回数据

Procedure <算法名>([<参数列表>])
Function <算法名>([<参数列表>])

3.2 指令序列

用Begin或"{"作为开始,用End或"}"作为结束。

Begin
    指令序列;
End


{
    指令序列;
}

3.3 输入/输出

输入:input,参数作值或对象的指针被传递
输出:output 或 return,return语句返回多个会上并回到过程的调用点。
错误:error,调用出现异常,调用过程负责处理该错误,当前程序不用说明如何处理

3.4 分支选择

//第一种
If<条件> Then
{
    指令序列;
}

//第二种
If<条件> Then
{
    指令序列1;
}
Else
{
    指令序列2;
}

3.5 赋值

x:=x+1;
x<-x+1;

3.6 循环

  • 计数式循环
    迭代增加循环计数器时,用to
    迭代减少循环计数器时,用downto
    步进用by
For 变量:=初值 To 终值
{
    指令序列;
}

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

  • 条件式循环
While (条件) do
{
    指令序列;
}

3.7 数组

A[j]指示数组A的第j个元素。符号“ …”用来指示数组中值的范围。
例如:
A[1…j]表示含元素A[1], A[2], … , A[j]的子数组;
还有个写法是A[0:n]表示数组下标从0开始一直到n
二维数组也是:A[0:m,0:n]

3.8 算法结束

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

End DFS

3.9 注释

//表示行注释

3.10 对象

复合数据通常被组织成对象,由属性组成,用对象.属性对象.对象.属性表示,如A.b.c。数组或对象的变量常看做一个数组或对象的指针。当指针不指向任何对象时为NIL

4、伪代码示例

 // 冒泡排序
 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;
/* this is a pseudocode sample */

a := 1
b ← a + 2
c :=[100]

if a ≥ 2 then
    goto Label_Print
else
    for i := 0 to 100
        a := a + i

    do j := (a+b*i)/100
        c[j] = a+b*i
    until j>100

    return

Label_Print:
    while b ≠ 3 and a = 4 do
        call log(b,a)
    end

exit
作者简介:常遇,现阿里巴巴高级技术专家。关注“全栈深入”微信公众号并回复 “全栈图谱” 下载高清全栈知识图谱压缩包。全栈深入提供全栈知识分享,包含不限于前端开发、后台开发、机器学习、云计算等。如需转载本文请注明作者:常遇 及来源:“全栈深入”微信公众号。

如需转载本文请注明作者:常遇 及 来源:“全栈深入”微信公众号。 加我微信 stacker1024,拉你进 『全栈开发架构』群一起学习交流!以下是公众号"全栈深入"最新文章。

[推荐] 史上最全全栈技术知识导图 [可下载]
[推荐] 硬核浏览器原理
[推荐] 面试腾讯、阿里、头条,数据结构和算法就靠他了

点赞
收藏
评论区
推荐文章
不才 不才
3年前
md-loader
mdloader组件文档是如何渲染出来文档用于描述系统功能,而组件文档描述组件的功能,对于前端组件为了直观体现一般会有一个预览模块,而一般组件文档都是采用markdown编写,而md是文本内容且并没有渲染组件代码的能力,那么这是如何做的呢?简单的说就是“自定义结构”,像elementui中对代码的描述为,中间的YOUCODE可以放简单的vue组件代码。这种
分布式系统的主键生成方案对比 | 京东云技术团队
UUID​UUID(通用唯一识别码)是由32个十六进制数组成的无序字符串,通过一定的算法计算出来。为了保证其唯一性,UUID规范定义了包括网卡MAC地址、时间戳、名字空间(Namespace)、随机或伪随机数、时序等元素,以及从这些元素生成UUID的算法。
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
近屿智能 近屿智能
5个月前
人人可开发AI应用!百度“秒哒”上线,学AI就选近屿智能
百度宣布国内首个“对话式”应用开发平台秒哒正式全量上线,用户仅需通过自然语言描述需求,即可自动生成完整功能代码。秒哒采用“无代码编程多智能体协作多工具调用”的技术组合,用户仅需通过自然语言描述需求,就能自动生成完整功能代码,包括小游戏、H5、网站或轻应