伪代码规范

    • 一、概述
    • 二、必要说明
    • 三、书写规范
    • 四、范例
      • 买卖股票的最佳时机

一、概述

伪代码是一种介于自然语言和编程语言之间的算法描述语言。使用伪代码的目的是为了使被描述的算法可以容易地以任何一种编程语言实现。

a.伪代码必须结构清晰,代码简单,可读性好,并且类似自然语言。
b.伪代码的主要目标是解释程序的每一行应该做什么,从而使程序员更容易构建代码构建阶段。
c.伪代码可以帮助人们理解解释代码的语法、规则、内涵和结构。

二、必要说明

1、虽然有一些正规的伪代码定义,但在实际应用中,并不需要太拘泥于伪代码的格式。主要目标是描述算法梗概,避开细节,启发思路。
2、一般而言,急于编写程序往往会拖累进度。
3、把伪代码改写成程序时,一般先选择较为容易的任务来完成。
4、在软件开发工程中,编写程序所需的工作量只占软件开发全部工作量的10%~20%。

三、书写规范

a.说明信息

首先在一开始写下伪代码的作用、目的和作者,日期等基本信息。例:
算法:KMP 算法的实现
作者:路人
时间:2022-01-17 15:34	
Input:
output:

b.注意事项

1.	使用简单的术语,每行只写一条语句。
2.	有效使用空白和缩进。
3.	描述清楚所有事物,但不要过度描述与主要问题无关的细节。
4.	遇到难以用此规范表达的算法时,使用陈述句描述或借用语法。
5.	在算法中的某些指令或子任务可以用文字来叙述,例如,”设x是A中的最大项”,这里A是一个数组;这样做的目的是为了避免因那些与主要问题无关的细节使算法本身杂乱无章。

c.变量

定义变量的语句可不用写出来,但必须在注释中给出。示例如下:
赋值:  x ← y+1 
交换 a 和 b 的值:  a <-> b 

d.代数运算符号

幂运算 ^
取模 mod
逻辑与 and
逻辑或 or
逻辑非 not
逻辑异或 xor
(其他与C语言符号相同)

e.流程书写

1.分支
if n > 0 then
	print("n 是一个比 0 大的数字")
else if n < 0 then
	print("n 是一个比 0 小的数字")
else
	print("n 就是 0")
end if
2.循环
1while 用于次数未定的循环。
n ← 10
while n > 0 do
	print ("n =" + n)
	n ← n-1
end while2for 用于次数固定的循环。
for i ← 0 to limit by incr do
	print ("hello, world!")
end for3)如果想遍历某个集合:
// A是一个集合
for each i in A do
	print(i "hello pseudocode")
end for

f.函数

//必要情况下,附上说明函数功能以及返回值类型,格式如下
//返回值类型:功能说明
function func_name(x, y)
	...
	return x + y
end func

四、范例

买卖股票的最佳时机

给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择某一天 买入这只股票,并选择在未来的某一个不同的日子卖出该股票。
设计一个算法来计算你所能获取的最大利润。
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。

示例 1:
输入:[7,1,5,3,6,4]
输出:5
解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
     注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。
     
示例 2:
输入:prices = [7,6,4,3,1]
输出:0
解释:在这种情况下, 没有交易完成, 所以最大利润为 0。
算法:买卖股票最大利润
作者:路人乙
时间:2021-01-21 23:37

输入: prices数组
输出: 最大利润

function maxProfit( prices ) 
  max ← 0
  //maxi为第i天卖出股票的最大利润
  maxi ← 0
  for i ← 1 to i < prices.length by i++ do
	if maxi > 0 then
		maxi ← maxi + 今天股票的差价(p[i]-p[i-1]else
		maxi ← 今天股票的差价
	end if
	if maxi > max then
		max ← maxi
  end for
  return max
end function
C++实现代码
class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int length=prices.size();
        int max=0;
        //maxi为第i天卖出股票的最大利润
        int maxi=0;
        for(int i=1;i<length;i++){//第i天卖出股票
            if(maxi>0){//如果前一天卖出股票有挣钱,今天卖出股票所挣的最多金额为昨天的加今天股票的差价
                maxi=maxi+prices[i]-prices[i-1];
            }
            else{//否则,今天卖出股票所挣的最多金额仅为今天股票的差价
                maxi=prices[i]-prices[i-1];
            }
            if(maxi>max) max=maxi;//比较早些时候卖出股票的情况
        }
        return max;
    }
};

伪代码是为让思路更清晰,突出主要矛盾,而不是写“八股文”!

更多推荐

【个人版】伪代码规范