資料結構與演算法(歸併排序)

2021-10-02 16:34:18 字數 2339 閱讀 3139

歸併排序是採用分治法的乙個典型的應用,歸併排序的思想就是先遞迴分解陣列,在合併陣列。

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

def merge_sort(alist):

"""歸併排序"""

n = len(alist)

if n <= 1:

return alist

mid = n//2

#left(right)採用歸併排序後形成的有序的新的列表

left = merge_sort(alist[:mid])

right = merge_sort(alist[mid:])

#將兩個有序的子串行合併成乙個整體

ll = merge(left,right)

return ll

def merge(left,right):

left_pointer, right_pointer = 0, 0

result =

while left_pointer < len(left) and right_pointer < len(right):

if left[left_pointer]排序方法

平均情況

最好情況

最壞情況

輔助空間

穩定性氣泡排序

o (n

2)

o(n^2)

o(n2)o(n

)o(n)

o(n)

o (n

2)

o(n^2)

o(n2)o(1

)o(1)

o(1)

穩定選擇排序

o (n

2)

o(n^2)

o(n2)o(n

2)

o(n^2)

o(n2)o(n

2)

o(n^2)

o(n2)o(1

)o(1)

o(1)

不穩定插入排序

o (n

2)

o(n^2)

o(n2)o(n

)o(n)

o(n)

o (n

2)

o(n^2)

o(n2)o(1

)o(1)

o(1)

穩定希爾排序

o (n

logn

)−o(

n2

)o(nlogn)-o(n^2)

o(nlog

n)−o

(n2)

o (n

1.3)

o(n^1.3)

o(n1.3)o(

n2

)o(n^2)

o(n2)o(1

)o(1)

o(1)

不穩定堆排序

o (n

logn

)o(nlogn)

o(nlog

n)o (n

logn

)o(nlogn)

o(nlog

n)o (n

logn

)o(nlogn)

o(nlog

n)o (1

)o(1)

o(1)

不穩定歸併排序

o (n

logn

)o(nlogn)

o(nlog

n)o (n

logn

)o(nlogn)

o(nlog

n)o (n

logn

)o(nlogn)

o(nlog

n)o (n

)o(n)

o(n)

穩定快速排序

o (n

logn

)o(nlogn)

o(nlog

n)o (n

logn

)o(nlogn)

o(nlog

n)o (n

2)

o(n^2)

o(n2)o(l

ogn)

−o(n

)o(logn)-o(n)

o(logn

)−o(

n)不穩定

資料結構與演算法 歸併排序

include include include string include include include include algorithm using namespace std void merge vector input,int left,int mid,int right,vector...

資料結構與演算法 歸併排序

你可以在 的 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...

資料結構與演算法 歸併排序

遞迴結束判斷 if size 1 return int temp int malloc n1 n2 sizeof int free temp 防止棧溢位 遞迴太深 在網上查了半天發現是函式名寫錯了,太不認真了!用遞迴實現 一定要有結束條件 void merging int a,int n1,int ...