作爲學校練習的一部分,我想比較排序算法並將其與Java練習對比。排序第二次更快
我自己實現了排序算法,我們對實現Comparable
接口的類Person
的對象進行排序。
到目前爲止很好,但我無法解釋的是,爲什麼在第一次調用我的排序方法時,排序需要比後續調用更長的時間?
輸出波紋管表示我的結果。
最佳,最壞和平均指被傳遞到分選方法的排序的數組:
- 最佳:陣列已經排序
- 最壞:該陣列被以相反的順序
- 平均排序方法:陣列中的對象是在隨機的順序
這是我的輸出:
1-call of the sorting methods
InsertionSort Best:1799ms Worst:78ms Avg:789ms
MergeSort Best:10ms Worst:3ms Avg:5ms
2-call of the sorting methods
InsertionSort Best:1065ms Worst:39ms Avg:691ms
MergeSort Best:3ms Worst:2ms Avg:5ms
3-call of the sorting methods
InsertionSort Best:1066ms Worst:39ms Avg:692ms
MergeSort Best:3ms Worst:2ms Avg:5ms
4-call of the sorting methods
InsertionSort Best:1065ms Worst:39ms Avg:691ms
MergeSort Best:3ms Worst:2ms Avg:5ms
JVM是否對後續調用進行優化?
我很困惑,將不勝感激任何幫助!
編輯:感謝您的建議和答案,到目前爲止! 爲了清楚幾點 - 我輸出中的每個呼叫都指的是完成整理所需的時間!
每次排序後,我再次使用UNSORTED數組進行新的調用!
我的源代碼可以下載作爲一個Eclipse項目作爲一個zip文件,在下面的Dropbox的鏈接: dropbox link to eclipse project.zip
附:我沒有使用Profiler的經驗 - 如果你能指點我的教程,那麼這很棒。
你可以發佈代碼嗎? –
您是否在運行之間重新洗牌數據? – user1676075
這很難說沒有任何代碼;並且例如;這可能取決於你如何測量。有關性能測量方面可能遇到的一些缺陷。有時候,例如,Java即時編譯器會做有趣的事情。 – GhostCat