教你寫一手漂亮的偽代碼

前言

最近在覆盤《算法設計與分析》這門課程的時候,發現老師寫得一手漂亮的偽代碼,著實羨慕不已,看他寫其實已經知道大致寫偽代碼的規則,但本著嚴謹的態度,還是系統的學習和整理出來。在學習過程中,我們不可能將每一個算法都完完整整敲一遍,那麼偽代碼就可以很快捷和清晰的寫出對一個算法的解決思路。


我在網上查到的博客中要麼寫的過於繁瑣,要麼就是沒有實例,這也激起了我想要整理這篇文章的動力,若文章中有錯誤或者不足,希望大家指出。

偽代碼的7個主要部分

1. 算法名稱
2. 指令序列
3. 輸入/輸出
4. 分支選擇
5. 賦值
6. 循環
7. 算法結束
文章將從這7個部分依次進行說明

1.算法名稱
有兩種表示算法的偽代碼:
過程(Procedure)

函數(Function)
過程和函數的區別是:
過程是執行一系列操作,不需要返回操作的結果,無返回數據。
函數是執行一系列的操作後,要將操作的結果返回,有返回數據。
簡單來說二者就是有沒有返回數據
算法偽代碼的書寫規則:

<code>Procedure ([])
Function ([])/<code>

2.指令序列
指令序列是算法的主體。
指令序列的書寫規則:
> 用Begin作為開始,用End作為結束;
> 或者用“{”作為開始,用“/}”作為結束
例如:


教你寫一手漂亮的偽代碼


或者


教你寫一手漂亮的偽代碼


3.輸入/輸出
輸入:Input
輸出:Output 或Return
看個人的習慣吧,我輸出一般用Return
4.分支選擇
總體有兩種分支,類似於C中的if語句 和if else語句用法是一樣的,可以嵌套。


教你寫一手漂亮的偽代碼


5.賦值

有兩種 可以用:=或者例如:

<code>x:=x+1;
x/<code>

選擇哪個,看自己的習慣吧
6.循環
兩種方式:計數式循環(for循環)和條件式循環(while循環)。
(1)計數式循環

<code>For 變量:=初值 To 終值
{    
  指令序列; 
 /}/<code>

循環次數:終值-初值+1
(2)條件式循環

<code>While (條件) do
{    
  指令序列;
 /}/<code>

7.算法結束
關鍵字End的後面加上算法名稱,表示算法結束,是算法的最後一句。
例如:

<code>End DFS/<code>


補充

除了這些,像運算符號* / + - %等等,都是和C語言用法一樣
數組:


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

舉個例子

例如冒泡排序的偽代碼:
會發現偽代碼的7大部分沒有提到的內容是:冒號的作用

<code>變量名 : 數據類型/<code>

還有var這是變量的意思,如果學過javascript應該會有比較深一點的理解,我在這裡理解就是告訴讀者,這是一個變量。


教你寫一手漂亮的偽代碼


再舉個插入排序的例子


教你寫一手漂亮的偽代碼


關於語句後面有沒有分號,我看有些人說有,有些說沒有,其實擬C偽代碼可以加分號,這樣看起來更習慣


說明

這個偽代碼是算法比較規範的偽代碼規則,我在網上查到有java的偽代碼,python偽代碼,php偽代碼等等,和其他的,我的理解就是把沒有完整實現的代碼叫做了偽代碼,其實只要能夠清楚表達思路,讓別人很容易理解,都可以稱作偽代碼吧。不受嚴格語法的約束,我想這也是偽代碼寫起來比較快樂的原因吧。

更多內容請WX搜索:松鼠技術站


分享到:


相關文章: