运动基元_Java更快地对基元数组进行排序?
運動基元
看來,在不久的將來,Java中的原語排序數(shù)組可能會提高性能。 弗拉基米爾·雅羅斯拉夫斯基(Vladimir Yaroslavskiy)已在core-libs-dev郵件列表中發(fā)布了一條消息 ,標題為“ Dual-Pivot Quicksort的新優(yōu)化版本 ”,其中Yaroslavskiy撰寫了“ Dual-Pivot Quicksort的優(yōu)化和更快版本”,他已經(jīng)“開始工作了”。在……過去5年中。”
“ 新的Dual-Pivot Quicksort優(yōu)化版本 ”消息包括有關(guān)Dual-Pivot Quicksort的一些歷史背景; 突出顯示了新版本在隨機數(shù)據(jù),“近乎結(jié)構(gòu)化的數(shù)組”和“周期輸入”方面的相對性能; 提供所涉及更改的全面摘要; 并提供用于更改的開放代碼審查的鏈接 。
Dual-Pivot Quicksort算法是2009年引入Java的。Yaroslavskiy在2009年9月撰寫的另一篇core-libs-dev郵件列表中 寫道: “ 用新的Dual-Pivot Quicksort替換java.util.Arrays中的Quicksort ”。 “我想與您分享新的Dual-Pivot Quicksort,它比已知的實現(xiàn)(理論上和實驗上)都快。 我想建議用新的替代JDK的Quicksort實現(xiàn)。” 在描述“新的Dual-Pivot Quicksort如何使用* two *樞軸元素”而不是所有早期方案使用的單個樞軸元素之前,該帖子描述了“經(jīng)典Quicksort算法”方案以及對該方案的一些修改。
原始消息“ 用新的Dual-Pivot Quicksort替換java.util.Arrays中的Quicksort ”具有一些其他有趣的歷史細節(jié),并在此處突出顯示。
- 喬恩·本特利(Jon Bentley)在一封郵件中粘貼了一封電子郵件,指出:“我認為弗拉基米爾(Vladimir)對Quicksort的貢獻遠遠超過了我以前做過的任何事情,并在Hoare的原始設計和Sedgewick的分析上位居前列。” 該消息還提供了有關(guān)快速排序的發(fā)展的簡短但有趣的歷史背景。 該信息充分說明了雅羅斯拉夫斯基的貢獻,但我認為它也充分說明了喬恩·本特利的性格。
- 喬什·布洛赫(Josh Bloch)在此消息中粘貼了一封電子郵件,其中說:“我相信此代碼最終可能會移植到多種語言并以Bentley和McIlroy的出色方式(大約成功20種成功)廣泛部署年)。” 事實證明是這種情況,因為其他語言(或語言庫)在某種程度上采用了該算法,包括JavaScript , Python和Ruby 。
通過在原始數(shù)組類型上使用Arrays.sort()方法的重載版本,可以看到新的改進版本的Dual-Pivot Quicksort可能帶來的性能改進。 搜索項“ Dual-Pivot Quicksort”在Javadoc生成的與Arrays類的JDK 9版本相關(guān)的HTML輸出中出現(xiàn)14次:
- Arrays.sort(int [])
- Arrays.sort(int [],int,int)
- Arrays.sort(long [])
- Arrays.sort(long [],int,int)
- Arrays.sort(short [])
- Arrays.sort(short [],int,int)
- Arrays.sort(char [])
- Arrays.sort(char [],int,int)
- Arrays.sort(byte [])
- Arrays.sort(byte [],int,int)
- Arrays.sort(float [])
- Arrays.sort(float [],int,int)
- Arrays.sort(double [])
- Arrays.sort(double [],int,int)
因為快速排序僅用于對基元進行排序,所以對雙數(shù)據(jù)點快速排序的這些性能增強功能僅影響基元上的方法,而不會影響傾向于使用合并排序的Arrays.sort(Object [])之類的方法。
據(jù)我所知,這些性能改進沒有針對Java的特定版本,但是它們似乎已經(jīng)進行了廣泛的審查和測試,因此與基元數(shù)組排序有關(guān)的性能改進可能很快就會到來。您附近的Java版本。
參考資料
- Dual-Pivot Quicksort算法 (2009年9月)
- 用新的Dual-Pivot Quicksort替換java.util.Arrays中的Quicksort (2009年9月)
- Dual-Pivot Quicksort的新優(yōu)化版本 (2018年1月)
- 關(guān)聯(lián)代碼更改
- 證明JDK的Dual Pivot Quicksort正確 (2017年8月)
- 為什么雙軸Quicksort快速? (2015年11月)
- 工程速查 (2013年1月)
- 快速分揀–三向和雙樞軸 (2013年6月)
- StackOverflow.com上的相關(guān)線程:
- Yaroslavskiy的雙重樞紐快速排序算法
翻譯自: https://www.javacodegeeks.com/2018/01/faster-sorting-arrays-primitives-coming-java.html
運動基元
總結(jié)
以上是生活随笔為你收集整理的运动基元_Java更快地对基元数组进行排序?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何恢复到新电脑怎么使电脑恢复到以前
- 下一篇: 电脑自动关机命令怎么设置和取消如何使电脑