java解码_Java数组已排序解码
java解碼
排序是我們在計算機科學中學習的第一個算法。 排序是一個非常有趣的領域,它有大約20多種算法,而且總是很難確定哪種算法最好。 排序算法的效率是根據占用的時間和所需的空間來衡量的。 一些時間氣泡排序是最好的,因為它沒有空間需求,并且對于空間受限或無法隨機訪問元素的設備而言,它可能是很好的選擇。
如今,我們傾向于使用庫排序功能,大多數語言庫排序功能都是自適應的,并且根據數據大小使用最佳算法。
在博客中,我將分享如何在Java Arrays.sort函數中做出這些決定。 決策基于數據類型和大小
–字節
對于字節數,java API在計數排序或插入排序之間進行決定。
如果輸入數組的大小小于29,則使用插入排序,插入排序的可視化
對于大型數組,使用計數排序,它基于字節范圍為-128到128的事實,它可以用作快速排序的優勢。 計數排序對內存的需求很小,并且插入就位,因此總的來說并沒有進行太多分配,當對字節數組進行排序時,它將使垃圾回收器感到滿意。
–字符
對于char決定是在Counting Sort和Dual Pivot QuickSort之間
如果輸入的大小大于3.2K,則對它使用的計數進行計數,并分配65K大小的數組以實現排序。 對于使用雙樞軸的較小陣列的快速排序變體,可以使用快速排序的可視化效果。
所使用的QuickSort也是就位的,因此在內存方面明智的做法是不會對Garbage Collector造成太大的負擔。
–整數/長
對于整數/長整數,隨著“ 合并排序”的輸入,事情變得很有趣。
對于小于256的輸入,有兩個選項可用
–如果輸入小于47,則使用“ 插入排序” ,在其他情況下,則使用“雙樞軸快速排序” 。
對于大型輸入數組,有一些很好的邊緣情況檢查
–如果數組已經按升序或降序排序,則檢查是否為單循環。
–如果數組元素相同,則使用“快速排序”,因為在這種情況下它最有效。
–或者,如果元素真的很混亂,例如每個偶數元素都大于奇數元素,那么它將使用快速排序。
最后所有這些檢查失敗,然后使用合并排序并分配相同大小的新數組并執行排序。 合并排序快速復習
關于Integer排序的重要注意事項是,如果已經對A??rray進行了排序,則不會分配任何內存,并且是否正在檢查QuickSort是否啟動了內存分配。
–浮動/雙
Float對NAN進行了特殊的優化,所有NAN都移到了數組的末尾,并且跳過了排序。 處理完NAN值后,排序將通過與INTEGER數據類型相同的檢查。
–按對象排序
集合排序幾乎沒有什么不同的規則,對于集合而言,僅在Merge Sort和Timsort之間。 默認情況下,使用Timsort,它是合并和插入排序的混合。
合并排序已不再使用,僅在打開“ java.util.Arrays.useLegacyMergeSort”標志時使用。
在JDK 8中,還添加了基于數組輸入大小的并行排序選項,對于大小大于8K的數組,則使用并行版本的sort。
翻譯自: https://www.javacodegeeks.com/2016/06/java-arrays-sort-decoded.html
java解碼
總結
以上是生活随笔為你收集整理的java解码_Java数组已排序解码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021摄影爱好者选购相机指南2021摄
- 下一篇: 以太网默认网关不可用以太网默认网关不可用