介紹:
歸併排序是採用分治法的乙個非常典型的應用。歸併
排序的思想就是先遞歸
分解陣列,再合
並陣列。
先考慮合併兩個有序陣列,基本思路是比較兩個陣列的最前面的數,誰小就先取誰,取了後相應的指標就往後移一位。然後再比較,直至乙個陣列為空,最後把另乙個陣列的剩餘部分複製過來即可。
再考慮遞迴分解,基本思路是將陣列分解成left
和right
,如果這兩個陣列內部資料是有序的,那麼就可以用上面合併陣列的方法將這兩個陣列合併排序。如何讓這兩個陣列內部是有序的?可以再二分,直至分解出的小組只含有乙個元素時為止,此時認為該小組內部已有序。然後合併排序相鄰二個小組即可。
排序演示:
源**:(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...