歸併排序演算法:空間複雜度為o(n),時間複雜度為o(n log n),演算法穩定,不具有適應性
1、將序列分兩左右兩部分
2、遞迴,重複第一步,直到左右兩部分裡面的元素數量為1
3、合併每個左右的部分,從小到大
4、完成合併
演算法的穩定性是指:對於待排序的序列中,相同項的原來次序不能被改變
演算法的適應性是指:演算法因原序列有序而更高效
def merge_sort(lst):
if len(lst) <= 1:
return lst
mid = len(lst) // 2
print 'left: ', lst[: mid]
print 'right: ', lst[mid:]
print '&&&&&'
left = merge_sort(lst[: mid])
right = merge_sort(lst[mid:])
return merge(left, right)
def merge(left, right):
print 'left: ', left
print 'right: ', right
res =
i, j = 0, 0
while i < len(left) and j < len(right):
if left[i] <= right[j]:
i += 1
else:
j += 1
res += left[i:]
res += right[j:]
print 'res: ', res
print '***'
return res
Python歸併排序演算法
歸併排序是採用分治法的乙個非常典型的應用。歸併排序的思想就是先遞迴分解陣列,再合併陣列。將陣列分解最小之後,然後合併兩個有序陣列,基本思路是比較兩個陣列的最前面的數,誰小就先取誰,取了後相應的指標就往後移一位。然後再比較,直至乙個陣列為空,最後把另乙個陣列的剩餘部分複製過來即可。usr bin en...
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...
歸併演算法 歸併排序
歸併演算法 歸併排序 這周需要用到歸併演算法,於是找了找相關的資料,整理如下 歸併排序 merge sort 是利用 歸併 技術來進行排序。歸併是指將若干個已排序的子檔案合併成乙個有序的檔案。兩路歸併演算法 1 演算法基本思路 設兩個有序的子檔案 相當於輸入堆 放在同一向量中相鄰的位置上 r low...