推出一個新系列,《看圖輕鬆理解數據結構和算法》,主要使用圖片來描述常見的數據結構和算法,輕鬆閱讀並理解掌握。本系列包括各類堆、各類隊列、各類列表、各類樹、各類圖、各類排序等等幾十篇的樣子。mysql
合併排序也叫歸併排序,它的主要思想是分治法,把待排序序列分爲若干有序子序列,而後將兩個或兩個以上的有序子序列進行合併,獲得一個新的完整的有序序列。因此首先得先對子序列進行排序,獲得有序子序列,而後再使序列段之間有序。算法
既然是分治法,那麼就涉及到分和治。分,即遞歸地將序列分紅小序列再求解;治,即遞歸地將分紅的小序列合併到一塊兒。sql
假設咱們有以下8個元素,分別爲84,25,59,71,62,16,34,45
,如今進行合併排序。網絡
先將0到3分爲子序列,4到7分爲子序列,數據結構
對於0到3子序列,繼續分爲0到1的子序列,2到3的子序列,併發
對於0到1子序列,繼續分爲0子序列和1子序列,而後對這兩個子序列進行合併,兩個子序列都只有一個元素,一個元素的序列能夠當作是有序序列,咱們把它們合併成有序序列,25小,先提出來,機器學習
而後是84,數據結構和算法
排好序的序列放回原來序列中,因而完成0和1子序列的合併操做,01變成有序子序列。接着處理2子序列和3子序列,學習
59比較小,先提出來,.net
而後是71,
排好序的序列放回原來序列中,因而完成2和3子序列的合併操做,23變成有序子序列。
接下去開始合併01有序子序列和23有序子序列,01序列中最小的元素25小於23序列中最小的元素59,因而25先提出來,
01序列剩餘元素中最小元素84大於23序列中最小的元素59,因而59提出來,
84與71比較,提出71,
最後提出84,
因而完成0到3的合併,0到3變爲有序序列,放回原序列中。接下去處理4到7的子序列,
繼續分爲4到5的子序列,6到7的子序列,
對於45子序列,繼續分爲4子序列和5子序列,而後對這兩個子序列進行合併,兩個子序列都只有一個元素,一個元素的序列能夠當作是有序序列,咱們把它們合併成有序序列,16小,先提出來,
而後是62,
排好序的序列放回原來序列中,因而完成4和5子序列的合併操做,45變成有序子序列。接着處理6子序列和7子序列,
34較小,先提出來,
而後是45,
排好序的序列放回原來序列中,因而完成6和7子序列的合併操做,67變成有序子序列。
接下去開始合併45有序子序列和67有序子序列,45序列中最小的元素16小於67序列中最小的元素34,因而16先提出來,
45序列中剩餘元素中最小元素62大於67序列中最小的元素34,因而34提出來,
62與45比較,提出45,
最後提出62,
因而完成4到7的合併,4到7變爲有序序列,放回原序列中。如今咱們已經完成了0到3的有序序列和4到7的有序序列,接下去開始合併03序列和47序列,
03序列最小元素25與47序列最小元素16比較,選出小的16,
繼續比較兩個序列最小的元素,25與34比較,選出25,
接着59與34比較,選出34,
59與45比較,選出45,
59與62比較,選出59,
71與62比較,選出62,
而後剩下的71和84不用比較了,由於47序列已經沒有元素了,直接按照原來順序提出來便可,
最終完成排序。
-------------推薦閱讀------------
個人開源項目彙總(機器&深度學習、NLP、網絡IO、AIML、mysql協議、chatbot)
跟我交流,向我提問:
歡迎關注: