def
merge
(a, p, q, r)
: n1 = q - p +
1 n2 = r - q
l =list
(range
(n1 +1)
) r =
list
(range
(n2 +1)
)for i in
range(0
, n1)
: l[i]
= a[p + i]
for j in
range(0
, n2)
: r[j]
= a[q + j +1]
l[n1]
=10000
#這裡可以使用無窮大/也可以使用乙個比陣列最大的元素大的值
r[n2]
=10000
i =0 j =
0for k in
range
(p, r+1)
:if l[i]
<= r[j]
: a[k]
= l[i]
i = i +
1else
: a[k]
= r[j]
j = j +
1def
mergesort
(a, p, r)
:if p < r:
q =int(
(p+(r-1)
)/2)
mergesort(a,p,q)
mergesort(a,q+
1,r)
merge(a,p,q,r)
return a
a =[
]
n =int
(input
("請輸入你需要排序的陣列的長度:"))
for i in
range(0
, n)
: b =
int(
input
("請依次輸入你需要排序的陣列元素:"))
print
(mergesort(a,0,
len(a)-1
))
演算法導論 歸併排序
public class mergesort mergesort data,0,中間 mergesort data,中間,最後 merge data,0,最後 system.out.println 排序前 for int i 0 i9 i 10 0 system.out.println system...
演算法導論 歸併排序
演算法的設計有很多思想,之前的插入排序使用的是增量的方法,即在排好的子陣列a中,將元素a j 插入,形成新的子陣列a。這次將實現另一種排序 歸併排序,歸併排序採用了 分治法 divide and conquer 本篇中包含 分治法,也可以稱為分治策略 是將乙個大規模的問題 原問題 劃分成n個規模較小...
演算法導論 歸併排序
歸併排序的步驟分為三個 將問題分解為更小的問題,然後解決小問題,將小問題合併為大問題的解。針對歸併排序的主要思想是 將乙個需要排序的陣列一分為二,然後將這兩部分進行單獨排序,然後將這兩個排好序的子數組合然後按照順序合併為大陣列。還有乙個就是邊界問題,將陣列無限的分下去知道最後的子陣列只剩乙個元素的時...