抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

伪代码的主要目标是描述算法梗概,在清晰展示算法思路的同时,回避繁琐的代码实现和调试过程。在伪代码的编写过程中,需要注意:

  1. 每行只写一条语句;
  2. 遵循一般的缩进规则;
  3. 尽可能的描述思路,省略细节;
  4. 必要时使用自然语言表达算法,以回避某些与算法思路无关的代码步骤;

头信息

在伪代码的开始,需要给出一些注解信息,如:

1
2
3
4
5
algorithm: 二分查找
author: 清弦.
date: 2023-10-07
Input: 有序数组 arr, 目标元素 tar
Output: 目标元素 tar 在数组 arr 中的下标 index

ps. 除了代码片的标题外,其余信息均可省略。


变量

伪代码中,变量一般无需声明,但对于重要的变量,需在注释中给出其含义

注释的规范可以任意选择,例如 C/C++ 语法中的 //,python 中的 #,Matlab 中的 % 等。

1
m = (left + right) / 2;  % m 为当前区间的中点

当然,对于一些有特殊初始值的变量,也可以使用 let 给出其初始值:

1
let left = 0, right = length - 1;  % length 为数组长度

代数运算

1
2
3
4
5
6
幂运算 ^
取模 mod
逻辑与 and
逻辑或 or
逻辑非 not
逻辑异或 xor

上述未涉及到的代数运算可直接参考 C/C++ 语法规范。


过程

过程的编写需要做到 规范缩进、有始有终

分支

1
2
3
4
5
6
7
if Case1 then
codeblock 1
else if Case2 then
codeblock 2
else
codeblock 3
end if

循环

1
2
3
while n < 10 do
n = n + 1;
end while
1
2
3
for i in arr do
i = i + 1;
end for
1
2
3
for i = l to r do
i = i + 1;
end for

函数

必要时,需以注释的形式给出对于函数功能和输入输出的描述。

1
2
3
4
function lower_bound(arr[], tar)
...
return index;
end func

当整个代码片中只有函数内容时,可以将函数声明作为代码片的 title,后续代码直接顶格编写即可,无需使用 end func 作为结尾:

1
2
3
4
5
function lower_bound(arr[], tar)

let left = 0, right = arr.length - 1;
...


示例

二分查找伪代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
algorithm: 二分查找
author: 清弦.
date: 2023-10-07
Input: 有序数组 arr, 目标元素 tar
Output: 目标元素 tar 在数组 arr 中的下标 index

let left = 0, right = arr.length - 1;
let index = -1; % 若在循环过程中没有找到tar,则index的值不会被更新
while left <= right do
mid = (left + right) / 2;
if arr[mid] == tar then
index = mid;
break;
else if arr[mid] < tar then
left = mid + 1;
else
right = mid - 1;
end if
end while

函数形式的二分查找伪代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
algorithm: 二分查找
author: 清弦.
date: 2023-10-07
Input: 有序数组 arr, 目标元素 tar
Output: 目标元素 tar 在数组 arr 中的下标 index

function binary_search(arr, tar)

let left = 0, right = arr.length - 1
while left <= right do
mid = (left + right) / 2;
if arr[mid] == tar then
return mid;
else if arr[mid] < tar then
left = mid + 1;
else
right = mid - 1;
end if
end while

return -1;

评论