scala 歸併排序詳解(一步一結果)

2021-10-08 16:47:56 字數 701 閱讀 2599

先貼原始碼(歡迎大佬指正)

object sortimp 

def msort[t]

(xs: list[t]

)(implicit ord: ordering[t]

): list[t]

= val n: int = xs.length / 2

if(n == 0) xs

else

}}

呼叫函式 msort 第二個引數implicit ord: ordering[t] 為比較器,這裡就不贅述了

直接上分析結果

將資料拆解到底(即單個元素)

merge(

merge(

merge(

merge(

) ,merge())

,megre()),

merge(

megre(

) ,megre()))

第一步合併+排序

merge(

merge(

merge(

,)

,),merge(

,))第二步合併+排序

merge(

merge(

,), )

第三步合併+排序

merge(,

)最終結果

歸併排序的進一步理解

歸併排序,顧名思義 先遞迴再合併的排序方式,一層一層的遞迴,當遞迴到最底層的時候,進行合併操作,這也是分治演算法的經典運用。首先是要進行把兩個有序的序列進行合併操作,需要借助輔助空間,先把有序序列儲存在輔助空間中,在從輔助空間把有序序列複製到原序列中,完成合併操作,相應 如下 void merge ...

一步一步寫演算法(之合併排序)

前面一篇部落格提到的快速排序是排序演算法中的一種經典演算法。和快速排序一樣,合併排序是另外一種經常使用的排序演算法。那麼合併排序演算法有什麼不同呢?關鍵之處就體現在這個合併上面。合併演算法的基本步驟如下所示 1 把0 length 1的陣列分成左陣列和右陣列 2 對左陣列和右陣列進行迭代排序 3 將...

一步一步寫演算法(之合併排序)

前面一篇部落格提到的快速排序是排序演算法中的一種經典演算法。和快速排序一樣,合併排序是另外一種經常使用的排序演算法。那麼合併排序演算法有什麼不同呢?關鍵之處就體現在這個合併上面。合併演算法的基本步驟如下所示 1 把0 length 1的陣列分成左陣列和右陣列 2 對左陣列和右陣列進行迭代排序 3 將...