首先先進入.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]
歸並排序

