資料結構 排序 歸併排序詳解

2021-09-12 17:56:31 字數 1055 閱讀 2426

* 歸併排序:時間複雜度t(n) = a*t(n/b) + o(n^d) 

*       log(b,a) = d=1 --> 複雜度為o(n^d * logn) -->o(n*logn)

*       空間複雜度o(n)

* 穩定性:不會交換相同數的位置,是乙個穩定方法

話不多說,直接上**:

public class mergesort 

// 獲取中點 mid= l + (r-l)/2 防止下標溢位

int mid =(l+r)/2;

// 對左半部分進行歸併:分解

mergesort(arr,l,mid);

// 對右半部分進行歸併:分解

mergesort(arr,mid+1,r);

// 呼叫真正的排序方法:合併

sort(arr,l,mid,r);

} public static void sort(int arr,int l,int mid,int r)

// 如果p不滿足條件,說明q已經執行完畢,只剩下p對應的陣列,直接將剩下的進行賦值

while(p<=mid)

// 如果p不滿足條件,說明q已經執行完畢,只剩下p對應的陣列,直接將剩下的進行賦值

while(q<=r)

// 將結果放到最後的陣列中。

for(int i=0;i<=help.length-1;i++)

}public static void main(string args) ;

// 呼叫方法

mergesort(arr,0,arr.length-1);

for (int i : arr)

}}

具體執行過程如下圖所示:注意遞迴的跳轉

遞迴完全鋪開的示意圖如下

資料結構排序 歸併排序

歸併排序是建立在歸併操作上的一種有效的排序演算法,時間複雜度是o nlogn 它過程為 比較a i 和a j 的大小,若a i a j 則將第乙個有序表中的元素a i 複製到r k 中,並令i和k分別加上1 否則將第二個有序表中的元素a j 複製到r k 中,並令j和k分別加上1,如此迴圈下去,直到...

資料結構 歸併排序

排序 sort 或分類 內部排序方法可以分為五類 插入排序 選擇排序 交換排序 歸併排序和分配排序。歸併排序 include using namespace std 歸併排序中的合併演算法 void merge int a,int left,int center,int len int t int ...

資料結構 歸併排序

歸併排序,即merge sort,通過遞迴式的merge操作 merge即歸併 實現排序。演算法思想是分治思想 divide and conquer 歸併排序一般是遞迴實現的 時間複雜度o nlgn 遞迴都是一去一回,去的時候divide,回的時候conquer。表達欠提煉 1 divide,分 遞...