經典排序演算法 歸併排序 python實現

2021-09-13 04:04:27 字數 1074 閱讀 8496

歸併排序::利用歸併的思想實現的排序方法,該演算法採用經典的分治策略。

分治法:將問題分成一些小的問題然後遞迴求解,而治則是將分的階段得到的各答案拼接在一起,即分而治之。

演算法思想步驟:(先將需排序的陣列遞迴分解進行排序,後合併有序陣列)

1.遞迴分解,基本思路是將陣列分解成leftright

2.如果這兩個陣列內部資料是有序的,那麼就可以用合併陣列的方法將這兩個陣列合併排序

3.如何讓這兩個陣列內部是有序的?可以再二分,直至分解出的小組只含有乙個元素時為止,此時認為該小組內部已有序。然後合併排序相鄰二個小組即可。

博主使用python實現演算法**如下:

1.我們考慮將兩個列表進行歸併排序,這裡我們首先分別對輸入的兩個數列進行選擇排序,使其有序後進行合併

def mergesort(s1,s2):

select_sort(s1)

select_sort(s2)

s=m = 0

n = 0

while m2.我們對乙個數列進行歸併排序,首先將此數列拆分,之後進行合併

def merge(s1,s2):

s=m = 0

n = 0

while mif s1[m] < s2[n]:

m += 1

else:

n += 1

s +=s1[m:]

s +=s2[n:]

return s

def mergesort(s):

if len(s)<=1:

return s

else:

num = int(len(s)/2)

s1 = mergesort(s[:num])

s2 = mergesort(s[num:])

print(s1,'+',s2)

return merge(s1,s2)

s = [2,7,4,8,14,10,89,45,67]

final=mergesort(s)

print(final)

經典演算法 歸併排序

題目說明 歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法也是採用分治法 divide and conquer 的乙個非常典型的應用。演算法複雜度為o n logn 題目解析 歸併排序是利用遞迴和分而治之的技術將資料序列劃分成為越來越小的半子表,再對半子表排序,最後再用遞迴步驟將排好序的半...

經典排序演算法之 歸併排序

1 思想 多次將兩個或兩個以上的有序表合併成乙個新的有序表。2 演算法時間複雜度 最好的情況下 一趟歸併需要n次,總共需要logn次,因此為o n logn 最壞的情況下,接近於平均情況下,為o n logn 說明 對長度為n的檔案,需進行logn 趟二路歸併,每趟歸併的時間為o n 故其時間複雜度...

經典排序演算法之歸併排序

原理,把原始陣列分成若干子陣列,對每乙個子陣列進行排序,繼續把子陣列與子陣列合併,合併後仍然有序,直到全部合併完,形成有序的陣列 舉例無序陣列 6 2 4 1 5 9 先看一下每個步驟下的狀態,完了再看合併細節 第一步 6 2 4 1 5 9 原始狀態 第二步 2 6 1 4 5 9 兩兩合併排序,...