Erlang寫插入排序法

-module(sort).
-compile(export_all).

rev_append([], List) ->
    List;
rev_append([A|Rest], List) ->
    rev_append(Rest, [A|List]).

insert_(A, [B|Rest], Acc) when A =< B ->
    rev_append(Acc, [A,B|Rest]);
insert_(A, [], Acc) ->
    rev_append(Acc, [A]);
insert_(A, [B|Rest], Acc) ->
    insert_(A, Rest, [B|Acc]).

insertion([], Sorted) ->
    Sorted;
insertion([A|Rest], Sorted) ->
    insertion(Rest, insert_(A, Sorted, [])).

insertion(List) ->
    insertion(List, []).

插入排序法,insertion/2正好可以套用Tail Recursion的格式,Sorted參數就是所謂accumulating parameter。insert_/3也用Tail Recursion處理將A插入Sorted的事情。

廣告

About 黃耀賢 (Yau-Hsien Huang)

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

發表迴響

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

WordPress.com Logo

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

Twitter picture

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

Facebook照片

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

Google+ photo

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

連結到 %s