歸併排序的思路:
歸併演算法程式(配合下圖進行思考):
左邊有數 且 右邊也有數
if li[i] < li[j]: #
左邊小於右邊
把左邊的數 新增到 ltmp 這個列表中
i += 1 #
右移一位
else:#
右邊小於左邊
j += 1 #
右移while i <= mid: #
如果左邊有剩餘
將剩餘的加入ltmp列表
i += 1 #
右移while j <= high: #
如果右邊有剩餘
將剩餘的加入ltmp列表
j += 1 #
右移 li[low:high+1] = ltmp #
將ltmp這個列表裡的數 傳給 li 這個列表
li = [1,4,6,7,9,2,3,5,8]
merge(li,0,4,8)
print(li)
列印出來的效果圖為:
有了歸併怎麼用?
左邊有數 且 右邊也有數
if li[i] < li[j]: #
左邊小於右邊
把左邊的數 新增到 ltmp 這個列表中
i += 1 #
右移一位
else:#
右邊小於左邊
j += 1 #
右移while i <= mid: #
如果左邊有剩餘
將剩餘的加入ltmp列表
i += 1 #
右移while j <= high: #
如果右邊有剩餘
將剩餘的加入ltmp列表
j += 1 #
右移 li[low:high+1] = ltmp #
將ltmp這個列表裡的數 傳給 li 這個列表
defmergesort(li,low,high):
if low
mid = (low + high) // 2mergesort(li,low,mid)
#先分解
mergesort(li,mid+1,high) #
先分解 merge(li,low,mid,high) #
在合併li = [1,4,6,7,9,2,3,5,8,]
mergesort(li,0,8)
print(li)
函式週期表丨篩選丨值丨HASONE二人組
hasonefilter函式與hasonevalue函式 嚴格來說,hasonefilter函式與hasonevalue函式屬於 篩選判斷 類函式,隸屬於 值 函式,當符合條件時,結果返回true或false。用途 通常用來去掉總計欄合計。語法 語法1 dax hasonefilter 列 等同於以...
Algorithm(二) 歸併排序
歸併 merge 排序法是將兩個 或兩個以上 有序表合併成乙個新的有序表,即把待排序序列分為若干個子串行,每個子串行是有序的。然後再把有序子串行合併為整體有序序列。歸併排序 歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用 分治法 divide and conquer 的乙個非常典型...
排序演算法(二) 歸併排序
歸併排序 mergesort 是大神馮諾依曼研發的一款高效且穩定的排序演算法,據資料顯示,python自帶排序函式用的就是歸併排序。其穩定性和效率肯定是毋庸置疑的了,學好歸併排序非常有用,是多路歸併排序的功底課 多路歸併排序在海量資料環境下記憶體不足是非常有用 時間複雜度 o n logn 空間複雜...