這裏的DOC:爲什麼OCaml有兩個排序函數:List.sort和List.stable_sort?
val sort : ('a -> 'a -> int) -> 'a list -> 'a list
排序中根據比較函數遞增的順序列表。如果比較函數的參數比較爲相等,則比較函數必須返回0;如果第一個較大,則返回正整數;如果第一個較小,則返回負整數(有關完整規範,請參閱Array.sort)。例如,比較是一個合適的比較函數。結果列表按升序排列。 List.sort保證運行在恆定的堆空間(除了結果列表的大小)和對數棧空間。
當前實現使用合併排序。它運行在不斷的堆空間和對數棧空間中。
val stable_sort : ('a -> 'a -> int) -> 'a list -> 'a list
同List.sort,但the sorting algorithm is guaranteed to be stable
(即該比較相等的元素被保持在它們的原始順序)。
當前實現使用合併排序。它運行在不斷的堆空間和對數棧空間中。
我以爲merge sort
反正是穩定的吧?
OCaml如何產生non-stable merge
排序?
在non-statble merge sort
版本中,速度更快嗎?
啊,好吧,它就像是一個文檔的東西,即他們以這種方式編寫文檔。 – 2013-02-22 18:01:07