幾種常用的排序方法4 歸併排序

2022-08-11 11:39:11 字數 801 閱讀 9004

歸併排序

歸併排序,又稱為合併排序,它是把待排序序列分為若干個子串行,每個子串行是有序的,然後再把有序子串行合併為整體有序序列。

使用的d&c的思想:

分解:將n個元素分解為各含n/2個元素的子串行;

解決:用合併排序法對兩個子串行進行遞迴的排序;

合併:合併兩個已經排好的子串行以得到正確結果。

歸併排序的速度僅次於快速排序,為穩定排序演算法,一般用於對總體無序,但是各子項相對有序的數列。其最好,最壞,平均時間複雜度都是o(nlogn)。

1

void merge(int a, int p, int q, int r)//

對兩個已經排好序的子數列進行合併 2

10for(int j = 1; j <= n2; j++)

1114 l[n1+1] = maxn;//

哨兵值,前面定義maxn為乙個很大的數

15 r[n2+1] = maxn;//

使用這個哨兵值是為了避免檢查每個子串行是不是空的。所有的數都不會比它大

16int i = 1

; 17

int j = 1;18

for(int k = p; k <= r; k++)//

有序的分別將小的數重新插入元序列中

19

25else26

30}

31}

3233

void merge_sort(int a, int p, int

r)34

42 }

排序4 歸併排序

歸併排序 merge sort 完全遵循上述分治法三個步驟 1 分解 將要排序的n個元素的序列分解成兩個具有n 2個元素的子串行 2 解決 使用歸併排序分別遞迴地排序兩個子串行 3 合併 合併兩個已排序的子串行,產生原問題的解。所以說歸併排序一種分治演算法的典型應用。歸併排序過程動態演示 時間複雜度...

排序4 歸併排序

3.海量資料的排序問題 歸併排序 merge sort 是建立在歸併操作上的一種有效的排序演算法,該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。歸併排序適合於外部排序,也可以適用於鍊錶排序。外部排序 指的是資料儲存在磁碟上。鍊錶排序 希爾 堆排序 快速排序等均不適...

幾種排序分享 歸併排序

這裡參考自 狄泰 資料結構課程 基本思想 將兩個或兩個以上的有序序列合併成乙個有序序列 意思就是 v 0 v 1 v 02 v m 和 v m v m 1 v m 2 v n 1 合併 為 v 0 v 1 v 02 v n 1 看下圖 舉例 直接上 template typename t void ...