歸併排序就是利用分治思想,合——分——合,把兩個有序的子陣列合併為乙個有序陣列,合併的策略就是比較兩個子陣列中還未參與排序部分的頭元素,把較小的元素加進來。歸併排序是穩定的排序。
對序列[7,6,4,3,1,2,8,5]按公升序排列。
合——分:
[7,6,4,3,1,2,8,5] -> [7,6,4,3],[1,2,8,5] -> [7,6],[4,3],[1,2],[8,5] -> [7],[6],[4],[3],[1],[2],[8],[5]
分——合:
[7],[6],[4],[3],[1],[2],[8],[5] -> [6,7],[3,4],[1,2],[5,8] -> [3,4,6,7],[1,2,5,8] -> [1,2,3,4,5,6,7,8]
class
solution:
# @param a an integer array
# @return nothing
defsortintegers2
(self, a):
# write your code here
s = 0
e = len(a) - 1
self.sortmerge(a, s, e)
# 合併函式
defmerge
(self, a, s, mid, e):
l = a[s:mid + 1]
r = a[mid + 1:e + 1]
i = 0
j = 0
for k in range(s, e + 1):
if l[i] <= r[j]:
a[k] = l[i]
i += 1
else:
a[k] = r[j]
j += 1
# 歸併排序的遞迴版本
defsortmerge
(self, a, s, e):
mid = (s + e) / 2
if s < e:
self.sortmerge(a, s, mid)
self.sortmerge(a, mid + 1, e)
self.merge(a, s, mid, e)
# 歸併排序的非遞迴版本
defsortmerge1
(self, a, s, e):
size = 1
while size <= e - s:
l = s
while l + size - 1
<= e - 1:
mid = l + size - 1
h = mid + size
h = min(h, e)
self.merge(a, l, mid, h)
l = h + 1
size *= 2
時間複雜度o(
nlog
n),空間複雜度o(n)。
python歸併排序 python 歸併排序
排序思路 1.將陣列分成兩組a,b,建立臨時陣列 c,c長度 a b 2.i,j分別屬於a,b 3.若a i b j 將b j 放入c,j 否則 a i 放入c,i 4.迴圈3步驟,將a或b中剩餘的元素放入c,再將c複製到陣列中 5.遞迴3 4直到a,b序列的長度 1 歸併排序 class merg...
python歸併排序
coding utf 8 def mergesort seq 遞迴 if len seq 1 return seq mid int len seq 2 left mergesort seq mid right mergesort seq mid return merge left,right def...
Python 歸併排序
歸併排序採用分而治之的方法,遞迴求解。將長度為n的列表分成兩個長度為n 2的子串行 對兩個子串行分別採用歸併排序 將兩個排序好的子串行合併成乙個最終的排序列表 如下 coding utf 8 author dreams file merge sort.py time 2018 7 26 9 29 i...