排序演算法 5 歸併排序

2021-09-24 08:33:58 字數 894 閱讀 2808

–歸併排序演算法思路:先將陣列不斷均分成兩堆,直至只有乙個元素,再兩兩進行排序合併。使用了大量了額外陣列空間,但減少了比較次數和寫操作。時間複雜度與空間複雜度將再排序演算法總結裡面討論。

下面直接展示演算法:

def merge_sort(nums):

#nums為list型別

#分解陣列直至陣列長度小於1

while len(nums) <= 1:

return nums

mid = len(nums)//2

left = merge_sort(nums[:mid])

right = merge_sort(nums[mid:])

#分解完畢後呼叫歸併函式

return merge(left,right)

def merge(left,right):

#left 和 right 均為list型別

#歸併函式

#左右陣列的初始指標位置與返回函式的定義

l, r = 0,0

result =

while l < len(left) and r < len(right):

if left[l] <= right[r]:

l += 1

else:

r += 1

#當兩陣列長度不一致時,將剩餘的陣列直接新增至末尾

#(由於前面的資料均已比較排序,所以直接新增至尾部即可)

result += right[r:]

result += left[l:]

return result

nums = [3,34,1,34,345,6,445,1,2]

a = merge_sort(nums)

print(a)

學習排序演算法5 歸併排序

此部落格為 部落格 歸併排序 思想 divide and conquer 分治法 將乙個陣列等分成兩個更小的陣列,將這兩個陣列排序後,再將它們歸併起來將得到乙個有序陣列 具體歸併方法就是從兩個陣列中從小到大放入大陣列中 時間複雜度 對於長度為n的任意陣列,自頂向下的歸併排序需要1 2n n至n n ...

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

歸併排序採用分治的方法,將陣列對半地拆分成子陣列,最後再有序地合併子陣列 merge 雙指標法,比較指標元素的大小來有序合併 時間複雜度分析 設陣列長為n,將陣列分成小陣列一共要logn步,每步都是乙個合併有序陣列的過程,時間複雜度記為o n 故一共為o nlogn 歸併排序的效能不受初始資料的影響...

排序 5 歸併排序

將包含n個元素的初始序列,看成n個有序的子串行,每個序列的長度為1,然後兩兩歸併.直到得到長度為n的有序序列。遞迴和非遞迴兩種方法 5.歸併排序 遞迴 recursion 融合 void merging int list1,int list1 size,int list2,int list2 siz...