歸併是分治法的典型應用。
主要思路:
將陣列分解最小之後,然後合併兩個有序陣列,基本思路是比較兩個陣列的最前面的數,誰小就先取誰,取了後相應的指標就往後移一位。然後再比較,直至乙個陣列為空,最後把另乙個陣列的剩餘部分複製過來即可。
歸併排序在python3的實現:
def
merge_sort
(alist)
:'''歸併排序'''
n =len(alist)
if n<=1:
return alist
mid = n//
2#中間位置的下標
left_li = merge_sort(alist[
:mid]
) right_li = merge_sort(alist[mid:])
#left_pointer左邊序列的指標,right_pointer右邊序列的指標,初值都為0
left_pointer,right_pointer =0,
0 result =
while left_pointer<
len(left_li)
and right_pointer<
len(right_li)
:if left_li[left_pointer]
< right_li[right_pointer]:)
left_pointer+=
1else:)
#哪個小追加哪個
right_pointer+=
1 result += left_li[left_pointer:
]#這兩句話執行時,其中乙個是追加空列表
result += right_li[right_pointer:
]#此時需要返回列表
return result
if __name__ ==
"__main__"
: li =[54
,26,93
,17,77
,31,44
,55,20
]print
(li)
sorted_li = merge_sort(li)
print
(sorted_li)
輸出:
[54,
26,93,
17,77,
31,44,
55,20]
[17,20
,26,31
,44,54
,55,77
,93]
時間複雜度分析: 資料結構與演算法 歸併排序
include include include string include include include include algorithm using namespace std void merge vector input,int left,int mid,int right,vector...
資料結構與演算法(歸併排序)
歸併排序是採用分治法的乙個典型的應用,歸併排序的思想就是先遞迴分解陣列,在合併陣列。將陣列分解最小之後,然後合併兩個有序陣列,基本思路是比較兩個陣列的前面的數,誰小就先取誰,取了後相應的指標就往後移一位,直至乙個陣列為空,最後把另乙個陣列的剩餘部分複製過來即可。def merge sort alis...
資料結構與演算法 歸併排序
你可以在 的 mer 標籤中看到歸併排序的動畫。歸併排序 時間複雜度 o nlogn 空間複雜度 o n 基本思想 分治思想。8 6 2 3 1 5 7 4 分 8 6 2 3 1 5 7 4 分 8 6 2 3 1 5 7 4 分 8 6 2 3 1 5 7 4 並 8 6 2 3 1 5 7 4...