美文网首页
算法中的伪代码语法格式 - 算法实现表达利器

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

作者: 全栈深入 | 来源:发表于2021-06-14 22:19 被阅读0次

伪代码 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,拉你进 『全栈开发架构』群一起学习交流!以下是公众号"全栈深入"最新文章。

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

相关文章

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

    伪代码 pseudo-code,是一种非正式的,类似自然语言,用于描述模块结构图的语言。对于熟练不同编程语言的程序...

  • SMO算法实现

    这里根据SMO算法原论文中的伪代码实现了SMO算法。算法和数据已经上传到了git。 伪代码 python实现 分类...

  • 算法-辗转相除法

    算法:辗转相除法(欧几里得算法) GCD递归定理 辗转相除法算法概述 辗转相除法伪代码 辗转相除法代码实现 对于两...

  • 用分治法求最大子项

    算法导论中的伪代码转换而来的Java语言实现的求最大子项的实现

  • 伪代码书写

    伪代码是一种算法描述语言,使用伪代码的目的是为了使被描述的算法可以容易的以任何一种编程语言实现。因此伪代码必须结构...

  • 算法-选择排序

    算 法:选择排序算法时间复杂度: 选择排序算法概述 选择排序伪代码 选择排序实现 选择排序算法概述 排序算法有许...

  • 算法-冒泡排序

    算 法:冒泡排序算法时间复杂度: 冒泡排序算法概述 冒泡排序伪代码 冒泡排序实现 冒泡排序算法概述 冒泡排...

  • 伪代码-Pseudocode

    伪代码-Pseudocode [TOC] 定义 主要用于简单快速的描述程序或者算法的实现、要求清晰明了 伪代码主观...

  • 数据算法 Hadoop/Spark大数据处理---第十三章

    本章为K近邻算法 K近邻算法的思想 本章实现方式 1.基于Mapreduce的伪代码实现 2.基于传统Scala来...

  • 算法-二分搜索算法

    算法:二分搜索算法(折半查找算法)时间复杂度: 二分搜索算法概述 二分搜索算法伪代码 二分搜索算法实现 二分搜索算...

网友评论

      本文标题:算法中的伪代码语法格式 - 算法实现表达利器

      本文链接:https://www.haomeiwen.com/subject/gqqaeltx.html