排序 歸併排序 Python

2021-08-07 07:58:57 字數 1485 閱讀 3034

歸併排序就是利用分治思想,合——分——合,把兩個有序的子陣列合併為乙個有序陣列,合併的策略就是比較兩個子陣列中還未參與排序部分的頭元素,把較小的元素加進來。歸併排序是穩定的排序。

對序列[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...