演算法導論 歸併排序

2021-09-08 11:56:50 字數 898 閱讀 6027

歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法(divide and conquer)的乙個非常典型的應用。

歸併操作(merge),指的是將兩個已經排序的序列合併成乙個序列的操作。

對兩個排序陣列合併成乙個有序陣列,這個很簡單

public

int merge(int a,int

b)else

}while(iwhile(jreturn

c; }

這個時間複雜度o(n+m)

對於乙個陣列的時候,low - mid是有序的,mid+1--high是有序的,進行歸併操作

public

void merge(int a,int low ,int mid ,int

high)

else

}while(i<=mid)

while(j<=high)

for(i = 0;i)

}

歸併排序工作原理:(假設序列共有n個元素): 

1.將序列每相鄰兩個數字進行歸併操作(merge),形成floor(n/2)個序列,排序後每個序列包含兩個元素 

2.將上述序列再次歸併,形成floor(n/4)個序列,每個序列包含四個元素 

3.重複步驟2,直到所有元素排序完畢

public

void mergesort(inta,int low,int

high)

儼然的一種後序遍歷的感覺

左側排序了

右側排序了

合併了排序陣列

空間複雜度:o(n)

時間複雜度:o(nlogn)

演算法導論 歸併排序

public class mergesort mergesort data,0,中間 mergesort data,中間,最後 merge data,0,最後 system.out.println 排序前 for int i 0 i9 i 10 0 system.out.println system...

演算法導論 歸併排序

演算法的設計有很多思想,之前的插入排序使用的是增量的方法,即在排好的子陣列a中,將元素a j 插入,形成新的子陣列a。這次將實現另一種排序 歸併排序,歸併排序採用了 分治法 divide and conquer 本篇中包含 分治法,也可以稱為分治策略 是將乙個大規模的問題 原問題 劃分成n個規模較小...

演算法導論 歸併排序

歸併排序的步驟分為三個 將問題分解為更小的問題,然後解決小問題,將小問題合併為大問題的解。針對歸併排序的主要思想是 將乙個需要排序的陣列一分為二,然後將這兩部分進行單獨排序,然後將這兩個排好序的子數組合然後按照順序合併為大陣列。還有乙個就是邊界問題,將陣列無限的分下去知道最後的子陣列只剩乙個元素的時...