高效率的排序演算法2 歸併排序

2022-03-11 14:53:38 字數 864 閱讀 8610

速度僅次於快速排序,而且排序穩定的就是你了--歸併排序,不過實現起來比快排要略複雜。

歸併排序,其的基本思路就是將陣列分成二組a,b,如果這二組組內的資料都是有序的,那麼就可以很方便的將這二組資料進行排序。

為了讓二組有序,可以將a,b組各自再分成二組。依次類推,當分出來的小組只有乙個資料時,可以認為這個小組組內已經達到了有序,然後再合併相鄰的二個小組就可以了。這樣通過先遞迴的分解數列,再合併數列就完成了歸併排序。

為了方便當做模板套用,我把if和while迴圈後面都加了大括號

**如下:

//

本次編寫的為按從大到小的順序

#include #include

using

namespace

std;

int a[1000],temp[1000];//

大小自己根據題目要求來改

void mergearray(int a,int temp,int first,int mid,int

last)

else

}while(i<=mm)

while(j<=nn)

//接下來別忘記了起始點是first

for(int i=0;i//

再把中間陣列的值賦回原陣列

}void mergesort(int a,int first,int last,int

temp)

}int

main()

mergesort(a,

0,n-1

,temp);

for(int i=0;i)

cout

<}

排序演算法 2 歸併排序

歸併排序使用了分治的思想,即將乙個陣列的排序分解為兩個子陣列 首先分解為規模更小的子問題 然後對這兩個子陣列分別排序 分而治之 最後對兩個已排序的子陣列進行合併 合併子問題結果 關鍵在於,合併操作只需要o n 的時間複雜度,那麼根據master定理,歸併排序的整體時間複雜度為o lg n 從漸進時間...

排序演算法(2) 歸併排序,快速排序

分治思想 思想 將兩個有序的陣列歸併成乙個有序陣列。下面兩種歸併方法用到 建立乙個適當大小的陣列,然後將兩個有序陣列乙個個有序的放入所建立的陣列中 在此造成了額外的空間儲存問題 方法簽名 merge array,lo,hi 將子陣列a lo.mid a mid 1.hi 歸併,並將結果放入大a lo...

排序演算法(2) 歸併排序 快速排序

穩定原地排序 時間複雜度 空間複雜度 歸併排序 o n logn o n 快速排序 o n logn 歸併排序的合併函式,在合併兩個有序陣列為乙個有序的時,需要借助額外的儲存空間 public class mergesort private static void mergesortinternal...