1. 歸并排序算法的使用情景
歸并排序算法和快速排序算法是java.util.Arrays中使用的排序算。對(duì)于一般的基本數(shù)據(jù)類型,Arrays.sort函數(shù)使用雙軸快速排序算法,而對(duì)于對(duì)象類型使用歸并排序(準(zhǔn)確的說(shuō)使用的是TimSort排序算法,它是歸并排序的優(yōu)化版本)。這樣做的原因有兩點(diǎn),第一個(gè)原因,歸并排序是穩(wěn)定的,而快速排序不是穩(wěn)定的。第二個(gè)原因,對(duì)于基本數(shù)據(jù)類型,排序的穩(wěn)定性意義不大,但對(duì)于復(fù)合數(shù)據(jù)類型(比如對(duì)象)排序的穩(wěn)定性就能幫助我們保持排序結(jié)果的某些性質(zhì)。
2. 自頂向下的歸并排序
自頂向下的排序算法就是把數(shù)組元素不斷的二分,直到子數(shù)組的元素個(gè)數(shù)為一個(gè),因?yàn)檫@個(gè)時(shí)候子數(shù)組必定是已有序的,然后將兩個(gè)有序的序列合并成一個(gè)新的有序的序列,兩個(gè)新的有序序列又可以合并成另一個(gè)新的有序序列,以此類推,直到合并成一個(gè)有序的數(shù)組。
為了體現(xiàn)歸并的排序的穩(wěn)定性,我們的代碼使用java的泛型來(lái)實(shí)現(xiàn)對(duì)任意對(duì)象的排序。
延伸閱讀
我想了解如何學(xué)習(xí) |