《算法基础》——1.3 伪代码

简介:

本节书摘来自华章计算机《算法基础》一书中的第1章,第1.3节,作者:(美)罗德·斯蒂芬斯(Rod Stephens)著,更多章节内容可以访问云栖社区“华章计算机”公众号查看

1.3 伪代码

为了使本书中描述的算法尽可能有用,首先我们用直观的术语来描述它们。有了这个高层次的解释,可以能够用大多数的编程语言来实现这些算法。
然而,一个算法的实现经常包含很多难以实现的琐碎细节。为了使这些细节易于处理,算法也用伪代码来描述。伪代码是很像编程语言但又不是真正的编程语言的一种文本。伪代码提供了代码实现算法过程中会用到的结构和细节,同时又不与某种特定的编程语言联系在一起。希望你能把这些伪代码翻译成真正的代码,然后在你的计算机上执行。
下面的代码片段展示了计算两个整数的最大公约数(GCD)算法的伪代码示例:
screenshot

取模操作
取模操作,在伪代码中写作Mod。它意味着整除之后的余数。比如说,13 Mod 4=1。因为13被4除,商是3,余数是1。

伪代码以一个注释开头。注释以字符“//”开始然后延伸到这一行的结束。
代码实际的第一行是算法的声明。这个算法叫做Gcd(最大公约数),它返回了一个整数结果。它有两个名为a和b的整数参数。
注 执行一个任务或者有选择地返回一个结果的一块代码称为例程、子例程、方法、过程、子过程或者函数。
声明之后的代码缩进以显示它是方法的一部分。方法主体的第一行以一个While循环开始。
只要While语句的条件保持为真,While下缩进的代码就会被执行。
While循环在End While语句处结束。End While语句并不是严格需要的,因为缩进显示了循环结束的地方,但是它(End While)提醒了什么样的语句块将要结束。
这个方法在Return语句处退出。这个算法返回了一个数值,所以这个Return语句表明了该算法应该返回哪个值。如果这个算法没有返回任何数值,例如,如果其目的是排列数值或者建立一个数据结构,那么Return语句执行后就没有任何返回值。
这个例子中的伪代码非常接近于实际的编程代码。其他的例子可能包含自然语言描述的指令和数值,这种情况下,指令用尖括号(< >)括起来,以表示需要把这些自然语言形式的指令翻译成程序代码。
通常,当声明一个参数或变量时(在Gcd算法中, 这包括参数a和b以及变量remainder),会在它前面给出数据类型,数据类型后面跟着一个冒号,如Integer: reminder。对于简单的整形循环变量,数据类型可能会被省略,如For i = 1 To 10。
伪代码不同于某些编程语言的另一个特点是它的For循环可能包含一个Step语句,用以表明循环变量每个循环后改变的数值。For循环以Next i语句结尾(i是循环变量),用来提醒你哪一个循环结束了。
例如,请思考下列的伪代码:
screenshot

本书中用的伪代码使用If-Then-Else语句、Case语句和其他需要的语句。从对于真正编程语言的了解来看,读者应该很熟悉这些语句。伪代码需要的别的东西都用英语阐明。
链表(List)是一个对你来说可能不熟悉的基础数据结构。链表类似于一个自我扩展的数组。它提供了一个Add方法让用户向链表的末尾添加元素。下面的伪代码建立了一个包含数字1到10的整数链表:
screenshot

在链表被初始化之后,伪代码可以像普通数组一样使用它并从链表的任意位置获取元素。与数组不同的是,链表也允许你在任何位置添加或删除元素。
本书中的许多算法被写成返回一个结果的方法或函数。方法声明的开头是结果的数据类型。如果一个方法执行了一些任务而没有返回一个结果,那么它就没有数据类型。
下列的伪代码包含了两个方法:
screenshot

DoubleIt方法接受一个整数作为参数然后返回了一个整数值,这段代码加倍了输入值并返回了结果。
DoSomething方法接受一个叫做value的整数数组作为参数,它执行了一个任务但是没有返回结果。例如,它可能会随机化或排列数组中的元素。(注:本书假定数组从下标0开始。例如,一个有三个元素的数组有下标0、1、2。)
伪代码应该是很直观并易于理解的,但是如果你发现一些无法理解的东西,请在这本书的讨论论坛上发帖提出问题或者发送邮件到RodStephens@CSharpHelper.com,我会给你指出正确的方向。
伪代码存在一个问题:没有任何编译器来检测错误。作为对基础算法的检测,本书同时给你一些实际的代码作为参考,C#实现的算法和许多练习可以在本书的网站上下载。

相关文章
C4.
|
5天前
|
存储 算法 搜索推荐
关于c语言用伪代码表示算法
关于c语言用伪代码表示算法
C4.
54 1
|
5天前
|
自然语言处理 算法 搜索推荐
C语言用伪代码表示算法
C语言用伪代码表示算法
41 0
|
5天前
|
算法 程序员 Python
用伪代码表示算法
在算法设计和编程中,伪代码是一种非常重要的工具。它允许我们以一种既非特定编程语言又足够详细的方式来描述算法。伪代码的目标是提供一个清晰、简洁的算法表示,而不必拘泥于特定的编程语法或规则。本文将探讨伪代码的优势,并提供一个用伪代码表示算法的例子。
31 1
|
5天前
|
机器学习/深度学习 算法
1.c语言:用伪代码表示算法
1.c语言:用伪代码表示算法
35 1
1.c语言:用伪代码表示算法
|
机器学习/深度学习 人工智能 算法
一文搞懂模型量化算法基础
一文搞懂模型量化算法基础
2843 0
|
算法 API
算法基础学习2——冒泡排序
要比较的每一对元素是相邻的,从下标为0开始,到最后一个元素,如果下标设为 j,则相邻元素下标值为 j +1,搜索到最后一个元素:j+1<a.length,而 a.length - 1 = i ;所以终止条件是 j < i
101 0
算法基础学习2——冒泡排序
|
机器学习/深度学习 算法 Java
算法基础学习1——时间复杂度和空间复杂度
算法基础学习1——时间复杂度和空间复杂度
96 0
算法基础学习1——时间复杂度和空间复杂度
|
搜索推荐 Java
Java基础数组-冒泡排序算法
Java基础数组-冒泡排序算法
Java基础数组-冒泡排序算法
|
机器学习/深度学习 自然语言处理 算法
深度学习算法基础
深度学习算法基础
148 0
|
存储 编解码 算法
【算法基础】希尔排序解析
希尔排序的基本思想是先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录"基本有序"时,再对全体记录进行依次直接插入排序。
90 0