目錄
- 1、操作型別
- 2、語法規則
- 3、組成部分
- 3.1 演算法名稱
- 3.2 指令序列
- 3.3 輸入/輸出
- 3.4 分支選擇
- 3.5 賦值
- 3.6 回圈
- 3.7 陣列
- 3.8 演算法結束
- 3.9 注釋
- 3.10 物件
- 4、偽代碼示例
偽代碼 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,拉你進 『全堆疊開發架構』群一起學習交流!以下是公眾號"全堆疊深入"最新文章,
[推薦] 史上最全全堆疊技術知識導圖 [可下載]
[推薦] 硬核瀏覽器原理
[推薦] 面試騰訊、阿里、頭條,資料結構和演算法就靠他了
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/287303.html
標籤:其他
