文章目录

  • 前言
  • 伪代码的7个主要部分
    • 1.算法名称
    • 2.指令序列
    • 3.输入/输出
    • 4.分支选择
    • 5.赋值
    • 6.循环
    • 7.算法结束
  • 补充
  • 举个例子
  • 说明

前言

最近在复盘《算法设计与分析》这门课程的时候,发现老师写得一手漂亮的伪代码,着实羡慕不已,看他写其实已经知道大致写伪代码的规则,但本着严谨的态度,还是系统的学习和整理出来。在学习过程中,我们不可能将每一个算法都完完整整敲一遍,那么伪代码就可以很快捷和清晰的写出对一个算法的解决思路。
我在网上查到的博客中要么写的过于繁琐,要么就是没有实例,这也激起了我想要整理这篇文章的动力,若文章中有错误或者不足,希望大家指出。

伪代码的7个主要部分

  1. 算法名称
  2. 指令序列
  3. 输入/输出
  4. 分支选择
  5. 赋值
  6. 循环
  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<-x+1;

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

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;beginfor i:=1 to n-1 dobeginchange:=false;for j:=n-1 downto i doif a[j]>a[j+1] thenbeginchange:=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;beginfor i:=2 to n dobegina[0]:=a[i];j:=i-1;while a[j]>a[0] do  begina[j+1]:=a[j];j:=j-1;end;a[j+1]:=a[0];end;end;

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

说明

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

如果文章对你有帮助,不要忘了给我点个赞吼( ̄▽ ̄)~
欢迎关注我的微信公众号:松鼠技术站

教你写一手漂亮的伪代码(详细规则简单实例)相关推荐

  1. python怎么定义未知数_码如其人,同学你能写一手漂亮的Python函数吗

    原标题:码如其人,同学你能写一手漂亮的Python函数吗 选自 hackernoon 作者:Jeff Knupp 在机器学习中,我们经常需要使用类和函数定义模型的各个部分,例如定义读取数据的函数.预处 ...

  2. 五分钟写一手漂亮的markdown--基础篇

    Markdown快速入门–基础篇 文章目录 Markdown快速入门--基础篇 一,标题 二,段落格式 三,字体设置 四,各种线 五,代码 六,列表 七,区块 八,超链接 九,图片 图片描述 十,表格 ...

  3. 前端开发:如何写一手漂亮的 Vue

    前几日听到一句生猛与激励并存,可怕与尴尬同在,最无奈也无解的话:"90后,你的中年危机已经杀到".这令我很受触动.显然,这有些夸张了,但就目前这日复一日的庸碌下去,眨眼的功夫,那情 ...

  4. “写”一手漂亮的好字,还会“画画”

    字虽写的不好看,多亏有了电脑,让我可以打出漂亮的字,今天我们学习下,在 CSS 中如何使用不同的字体.并介绍 element-ui 的图形字体是如何实现的. 在 mac.或者 window 系统中预置 ...

  5. python怎么命名未知数_码如其人,小老弟,你能写一手漂亮的Python函数吗

    与多数现代编程语言一样,在 Python 中,函数是抽象和封装的基本方法之一.你在开发阶段或许已经写过数百个函数,但并非每个函数都生而平等.写出「糟糕的」函数会直接影响代码的可读性和可维护性.那么,什 ...

  6. google python代码规范_如何用好python编码规范,写一手漂亮的代码

    前一段时间在编写python 代码的时候编辑器中一直在提示规范问题,因为强迫症的原因,我决定遵循python 的编码规范去编码,然后把需要注意的点记录下来, 帮助自己和大家一起成长. 这是我的main ...

  7. pep8 python 编码规范_如何用好python编码规范,写一手漂亮的代码

    前一段时间在编写python 代码的时候编辑器中一直在提示规范问题,因为强迫症的原因,我决定遵循python 的编码规范去编码,然后把需要注意的点记录下来, 帮助自己和大家一起成长. 这是我的main ...

  8. matlab画服装版,教你画一手漂亮的服装款式图!(手绘款式图模板)

    (添加时备注姓名/学校或城市) 服装平面款式图是一种单纯的服装平面展示图,是要按照人体的比例关系来进行绘制,可作为时装效果图的款式细节,工艺表现进行辅助和补充说明.在绘制的过程中要求比例结构合理,线条 ...

  9. Paxos协议超级详细解释+简单实例

    Basic-Paxos算法(可以先看后面的实际例子再看前面的具体介绍部分) Paxos算法的目的 Paxos算法的目的是为了解决分布式环境下一致性的问题. 多个节点并发操纵数据,如何保证在读写过程中数 ...

最新文章

  1. 贝佐斯明抢马斯克太空生意:数十亿美元组卫星互联网,5年内发射3236颗卫星...
  2. python array_python数组array.array(转帖)
  3. 纯c语言实现动态分配多维数组的方法
  4. android 4.4.2截屏方法,android4.4.2 使用 uiautoviewer 截屏报错
  5. yum 来安装 nodejs
  6. 自己搭建mysql服务要知道的二三事
  7. iQOO Pro 5G版今日正式开售:售价最亲民的5G旗舰
  8. Centos7.9安装Mysql5.7.32_mysql-5.7.32-1.el7.x86_64.rpm-bundle.tar_亲测成功---Linux工作笔记041
  9. Auto.js 全命令整理(三) 输出专题
  10. 吴恩达神经网络和深度学习-学习笔记-23-快速搭建你的第一个系统原型,然后迭代
  11. android中在java代码中设置Button按钮的背景颜色
  12. 封装数据库增删该通用方法
  13. 推荐C语言视频<<跟着星仔学C语言>>
  14. Android代码查看Android版本
  15. h5 android上传本地视频文件,关于webview适配H5上传照片或者视频文件的方法
  16. 实测榛子云短信平台短信接收速度
  17. 汽车销量查询小助手(小程序)销量趋势图功能及代码知识分享
  18. portal服务器认证系统有哪些,Portal技术简介
  19. java 假设检验_Spark机器学习-Java版(二)-相关系数和假设检验
  20. 2_嵌入式软件开发简介

热门文章

  1. 新东方雅思词汇(List 16 ~ List 20)
  2. 程序猿里面的“一阳指”,一个合格的程序猿是怎样炼成的?
  3. 顺序二叉树(堆)与链式二叉树的C语言实现
  4. python冒泡排序原理_python冒泡排序详解
  5. 小程序获取用户信息无法得到问题
  6. Minimum/Maximum Spanning Tree/Forest
  7. 【C++标准库】7-STL容器-Map与Multimap-导读-能力-操作函数
  8. 【深思】魏则西,你为何死揪百度不放——媒体的腐烂与变质!
  9. 有64个格, 第1个格子里面1粒麦子, 第2个格子里面2粒麦子(2021/1/15)
  10. appium移动端python大麦网抢票