算法中的偽代碼語法格式 - 算法實現(xiàn)表達利器

偽代碼 pseudo-code,是一種非正式的,類似自然語言,用于描述模塊結構圖的語言。對于熟練不同編程語言的程序員要理解其他編程語言編寫的功能時很困難,而偽代碼清晰、簡單、可讀性好,可將整個算法運行過程的結構用接近自然語言的形式描述出來。偽代碼不關心軟件工程的問題,常忽略數(shù)據(jù)抽象、模塊性、錯誤處理的問題。

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、語法規(guī)則

1、每一條指令占一行(else if除外)
2、指令后不跟任何符號
3、用縮進表示塊結構、分支結構,代替begin..end、if-then-else語句

3、組成部分

3.1 算法名稱

過程:Procedure,執(zhí)行一系列操作,不需返回結果,無返回數(shù)據(jù)
函數(shù):Function,執(zhí)行一系列操作,需返回結果,有返回數(shù)據(jù)

Procedure <算法名>([<參數(shù)列表>])
Function <算法名>([<參數(shù)列表>])

3.2 指令序列

用Begin或"{"作為開始,用End或"}"作為結束。

Begin
    指令序列;
End


{
    指令序列;
}

3.3 輸入/輸出

輸入:input,參數(shù)作值或?qū)ο蟮闹羔槺粋鬟f
輸出:output 或 return,return語句返回多個會上并回到過程的調(diào)用點。
錯誤:error,調(diào)用出現(xiàn)異常,調(diào)用過程負責處理該錯誤,當前程序不用說明如何處理

3.4 分支選擇

//第一種
If<條件> Then
{
    指令序列;
}

//第二種
If<條件> Then
{
    指令序列1;
}
Else
{
    指令序列2;
}

3.5 賦值

x:=x+1;
x<-x+1;

3.6 循環(huán)

  • 計數(shù)式循環(huán)
    迭代增加循環(huán)計數(shù)器時,用to
    迭代減少循環(huán)計數(shù)器時,用downto
    步進用by
For 變量:=初值 To 終值
{
    指令序列;
}

循環(huán)次數(shù):終值-初值+1

  • 條件式循環(huán)
While (條件) do
{
    指令序列;
}

3.7 數(shù)組

A[j]指示數(shù)組A的第j個元素。符號“ …”用來指示數(shù)組中值的范圍。
例如:
A[1…j]表示含元素A[1], A[2], … , A[j]的子數(shù)組;
還有個寫法是A[0:n]表示數(shù)組下標從0開始一直到n
二維數(shù)組也是:A[0:m,0:n]

3.8 算法結束

關鍵字End的后面加上算法名稱,表示算法結束,是算法的最后一句。

End DFS

3.9 注釋

//表示行注釋

3.10 對象

復合數(shù)據(jù)通常被組織成對象,由屬性組成,用對象.屬性對象.對象.屬性表示,如A.b.c。數(shù)組或?qū)ο蟮淖兞砍?醋鲆粋€數(shù)組或?qū)ο蟮闹羔?。當指針不指向任何對象時為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

作者簡介:常遇,現(xiàn)阿里巴巴高級技術專家。關注“全棧深入”微信公眾號并回復 “全棧圖譜” 下載高清全棧知識圖譜壓縮包。全棧深入提供全棧知識分享,包含不限于前端開發(fā)、后臺開發(fā)、機器學習、云計算等。如需轉(zhuǎn)載本文請注明作者:常遇 及 來源:“全棧深入”微信公眾號。

如需轉(zhuǎn)載本文請注明作者:常遇 及 來源:“全棧深入”微信公眾號。 加我微信 stacker1024,拉你進 『全棧開發(fā)架構』群一起學習交流!以下是公眾號"全棧深入"最新文章。

[推薦] 史上最全全棧技術知識導圖 [可下載]
[推薦] 硬核瀏覽器原理
[推薦] 面試騰訊、阿里、頭條,數(shù)據(jù)結構和算法就靠他了

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 什么是偽代碼? 偽代碼(Pseudocode)是一種算法描述語言。使用偽代碼的目的是使被描述的算法可以容易地以任何...
    伍帆閱讀 2,660評論 0 0
  • 原文地址:github.com/kdn251/interviews譯文出自:掘金翻譯計劃譯者:王下邀月熊校對者:P...
    wwmin_閱讀 2,019評論 0 51
  • 課程介紹 先修課:概率統(tǒng)計,程序設計實習,集合論與圖論 后續(xù)課:算法分析與設計,編譯原理,操作系統(tǒng),數(shù)據(jù)庫概論,人...
    ShellyWhen閱讀 2,477評論 0 3
  • 1.鏈表 1.實現(xiàn)一個單向鏈表 2.找出鏈表相交節(jié)點,假設均沒有環(huán) 3.判斷鏈表是否有環(huán)思路:使用快慢兩個指針,當...
    X1028閱讀 738評論 0 0
  • 馬化騰的大名,相信大家都聽過。作為騰訊公司主要創(chuàng)辦人之一,他竟然曾經(jīng)也是個程序員。早前,網(wǎng)絡上曝光了一張馬化騰16...
    編程獅W3Cschool閱讀 16,340評論 0 4

友情鏈接更多精彩內(nèi)容