排序演算法 歸併排序 MergeSort

2022-07-31 20:24:10 字數 1020 閱讀 1052

介紹:

歸併排序是採用分治法的乙個非常典型的應用。歸併排序的思想就是先遞分解陣列,再並陣列。

先考慮合併兩個有序陣列,基本思路是比較兩個陣列的最前面的數,誰小就先取誰,取了後相應的指標就往後移一位。然後再比較,直至乙個陣列為空,最後把另乙個陣列的剩餘部分複製過來即可。

再考慮遞迴分解,基本思路是將陣列分解成leftright,如果這兩個陣列內部資料是有序的,那麼就可以用上面合併陣列的方法將這兩個陣列合併排序。如何讓這兩個陣列內部是有序的?可以再二分,直至分解出的小組只含有乙個元素時為止,此時認為該小組內部已有序。然後合併排序相鄰二個小組即可。

排序演示:

源**:(python實現)

def merge_sort(ary):

if len(ary) <= 1 : return ary

num = int(len(ary)/2) #二分分解

left = merge_sort(ary[:num])

right = merge_sort(ary[num:])

return merge(left,right) #合併陣列

def merge(left,right):

l,r = 0,0 #left與right陣列的下標指標

result =

while l

if left[l] < right[r]:

l += 1

else:

r += 1

result += left[l:]

result += right[r:]

return result

排序演算法 歸併排序

歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。首先考慮下如何將將二個有序數列合併。這個非常簡單,只要從比較二個數列的第乙個數,誰小就先取誰,取了後就在對應數列中刪除這個數。然後再進行比較,如果有數列為空,那直接將另...

排序演算法 歸併排序

include include define status int define max 20 typedef struct elemtype typedef struct sqlist void inital sqlist l 初始化 bool lt int i,int j void merge ...

排序演算法 歸併排序

歸併排序的思想其實完全是分治法的思想的體現,它完全遵循分治法的模式。這裡有必要再重提下分治法的思想 將原有的問題分解為幾個規模較小的但類似於原問題的子問題,遞迴的求解這些子問題,然後再合併這些子問題的解來求得原問題的解。現在來看看歸併排序的操作 1 將等待排序的含有 n 個元素的序列分解成各具有 n...