2016-11-18 54 views
1

在像Python這樣的編程語言中哪個會有更好的效率?如果我使用排序算法像合併排序排序數組或如果我使用內置的API如sort()排序數組?如果算法是無關的編程語言,那麼什麼是算法的優勢內置的方法或API的使用API​​進行排序或算法?

+0

「API或算法」是一個荒謬的問題,他們不是替代品。 API是圖書館面向公衆的界面。算法是解決問題的分步說明。庫使用API​​和算法。 'sort'實現了一種排序算法(稱爲「timsort」),並提供了一個用於調用它的API。 –

回答

5

爲什麼要使用公共API:

  • 內置的方法由經驗非常豐富,其中被寫入和審查編碼器,並且投入了大量精力來優化它們以達到效率。
  • 由於內置方法是公共API,因此它也意味着它們不斷被使用,這意味着您可以進行大規模的「免費」測試。你更有可能在公共API中發現問題,而不是在私人API中發現問題,一旦發現問題 - 它將爲你解決。
  • 不要重新發明輪子。有人已經爲你編程,使用它。如果您的配置文件說有問題,請考慮替換它。之前沒有。

爲什麼使用定製方法:

  • 這就是說,公共API是一般情況。如果您需要針對您的方案特定的東西 ,您可能會發現一個解決方案將使效率更高,但實際上 會比已經優化的通用公共API要花費相當多的時間。

TL;博士:使用公共API,除非你:

  1. 需要它,並能夠承受大量的時間來取代它。
  2. 知道你在做什麼很好。
  3. 打算維護它,並對其進行強大的測試。
+0

這意味着如果我被要求在一些有競爭力的編程中對數組進行排序,我可能更喜歡API而不是算法? – Manel

+1

@Manel依賴於競爭規則。如果比賽的目的*是實施該算法,那麼你可能不應該使用內建的方法。 ;) –

1

這些庫通常使用經過良好測試和正確優化的algorythms。例如Python使用Timsort其中:

  • 是在最壞的情況下
  • 需要O(即比較等於被保留元素的順序)一個穩定的排序(N日誌⁡n)的比較來進行排序n個元素的數組
  • 在最好的情況下(當輸入已經排序)中運行的線性時間

除非你有特殊的要求,讓你知道,您的特定數據集一個排序algorythm會給你可以使用最好的結果標準庫的實現。

另一個原因手工打造排序,顯然是爲學術目的...