重寫Erlang氣泡演算法

-module(bubble_sort).
-compile(export_all).

swap([A,B|Rest]) when A > B ->
    [B,A|Rest];
swap(List) ->
    List.

bubble([A|Rest]) ->
    List = [A|bubble(Rest)],
    swap(List);
bubble([]) ->
    [].

sort([]) ->
    [];
sort(List) ->
    [A|Rest] = bubble(List),
    [A|sort(Rest)].

按照氣泡演算法的標準描述,先有swap/1將list前二個數字做適當交換。(函數功能是條件式交換,嚴格來說名字應該叫做try_swqp/1。)藉由swap/1,bubble/1將list中數字小的「往下沉」。於是,外層的排序演算法是首先將list bubble調動一次,之後最小的數字在前頭,於是,將頭一個數字摘掉,剩下的list再排序一次。

廣告

About 黃耀賢 (Yau-Hsien Huang)

熱愛 Erlang ,並且有相關工作經驗。喜歡程式語言。喜歡邏輯。目前用 Python 工作。
本篇發表於 Erlang, Fun。將永久鏈結加入書籤。

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s