Collections.sort排序原理


 

首先先進入.sort源碼

 

 

 

進入list.sort

 

 

 

 

進入Arrays.sort

 

 

 

 

如果沒有指定Comparator 進入Arrays.sort

 

 

 

 

LegacyMergeSort.userRequested為true 沒有設置進入ComparableTimSort.sort
看TimSort的代碼與ComparableTimSort幾乎一樣,只是在對比的時候有些差異
ComparableTimSort用Comparator來進行比較

 


ComparableTimSort:

 

 

 

 

TimSort:

 

 

 

 

接着看下面,可以看到是否設置了LegacyMergeSort.userRequested為true 如果設置了則使用歸並排序,如果未設置則使用TimSort(優化歸並排序)

 

插入排序

 

 

 

 

單軸快排


如果待排序的數組項數為0或1,直接返回。(遞歸出口)
在待排序的數組中任選一個元素,作為中心點(pivot)。
將小於pivot的元素,大於pivot的元素划分為開來。也就是將小於中心點的元素放在中心點前面,大於中心點的元素放在中心點后面。
對前面小於pivot的元素進行快速排序,對大於pivot的元素進行快速排序。


雙軸快排


int[] arr = { 20,40, 50, 11, 8, 7, 54, 1, 5 };

基准數據 tmp=20 然后從數組兩端開始掃描數據
當隊尾的元素大於等於基准數據時,向前挪動right指針
如果隊尾元素小於tmp了,需要將其賦值給left
當隊首元素小於等於tmp時,向前挪動left指針
當隊首元素大於tmp時,需要將其賦值給high
當low和high相等,此時的low或high就是tmp的正確索引位置 直接賦值arr[low]


歸並排序

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM