我很好奇Lua的默認table.sort
使用的算法,只是因爲它比我遇到的其他排序算法慢。我也很好奇,如果Lua的table.sort
是用C語言編寫的引擎,或者它在Lua的庫中。table.sort使用什麼算法?
回答
table.sort使用什麼算法?
的comment in tablib.c
(滾動了一下)指出
/*
** {======================================================
** Quicksort
** (based on `Algorithms in MODULA-3', Robert Sedgewick;
** Addison-Wesley, 1993.)
** =======================================================
*/
您可以在我提供的鏈接閱讀源代碼。
我也很好奇,如果Lua的table.sort是用C語言編寫的引擎,或者它是在Lua的庫中。
此時,直接和Lua是來全庫(io
,table
,math
,...)是用C寫
內部,table.sort
使用快速排序,它的用C寫的筆記該快速排序不穩定。有一點讓我感到意外的是,Lua沒有直接使用C的qsort()
。
至於性能,很難說,因爲存在各種因素,例如,您正在比較哪種語言和哪種算法,以及正在測試哪種數據。
使用Lua,我發現有幾個算法比默認的算法快一點。如果尺寸相對較小,雞尾酒排序和氣泡排序實際上比默認快。如果體積很大,那麼LSD Radix排序和其他兩個我說的更快。我正在用不同類型的數據進行測試,比如反轉數組,隨機數組,甚至大多數排序數組,但是對於每個測試,默認排序仍然比較慢。 – jocopa3
@ jocopa3據我所知,這不是Lua的問題,而是快速的。例如,快排在排序數組和反轉數組上表現不佳。如果您需要對特定問題進行排序,並且Lua的默認排序功能不夠好,那麼在C語言中編寫特定的排序算法是一個好主意。 –
@YuHao從查看鏈接的源代碼,Lua的qsort每次都選擇middle作爲關鍵點。這應該接近qsort的理想情況,它不應該表現不佳。我懷疑所有這些lua API調用可能會導致速度變慢,但除非進行配置,否則無法確定。 – greatwolf
- 1. GL_LINEAR使用什麼算法?
- 2. arsort使用什麼算法?
- 3. mayavi.mlab.pipeline.iso_surface.IsoSurface使用什麼算法?
- 4. Math.random使用什麼算法?
- 5. 的Lua與table.sort
- 6. VB.NET table.sort與多列
- 7. .Net Machinekey.Protect - 使用什麼算法?
- 8. 爲什麼BFS算法使用隊列?
- 9. python的排序()使用什麼算法?
- 10. 在std :: search中使用什麼算法?
- 11. Python在fractions.gcd()中使用什麼算法?
- 12. 使用什麼語音壓縮算法?
- 13. 這裏使用了什麼算法?
- 14. GameplayKit尋路使用什麼算法?
- 15. PHP使用什麼樣的算法?
- 16. qsort使用什麼排序算法?
- 17. 文本壓縮 - 什麼算法使用
- 18. MKMapPointForCoordinate中使用的算法是什麼?
- 19. 試圖找出使用什麼算法
- 20. Lua table.sort方法何時變穩定?
- 21. 什麼是算法
- 22. 什麼算法/方法被用來使用暴力方法?
- 23. Excel使用什麼算法重新計算公式?
- 24. 使用什麼算法來計算校驗位?
- 25. 什麼是算法必須研究,以使更好的算法
- 26. D3.js使用什麼算法來使用力指向圖?
- 27. 我怎麼知道使用什麼加密算法
- 28. 什麼是TreeNode.Nodes.ContainsKey的算法
- 29. 這是什麼算法?
- 30. 什麼是McNaughton-Yamada算法?
請注意,LuaJIT正在考慮切換到[smoothsort](http://en.wikipedia.org/wiki/Smoothsort),其幾個庫函數現在在Lua字節碼中實現(這實際上是有益的,因爲它可以更好地編譯JIT) –