合併排序演算法

2021-06-18 13:58:08 字數 893 閱讀 3375

主要思想:不斷將已經有序的子陣列a[p..q]和a[q+1..r]合併為新的有序的陣列a[p..r]。具體過程可如下操作:

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

解決:對兩個子陣列遞迴地排序;

合併:合併兩個已經有序的子陣列得到最終的有序陣列。

**://合併/歸併排序——分治策略

#include #include using namespace std;

void merger(vector&data,int p,int q,int r);

void merger_sort(vector&data,int p,int r);

int main()

//顯示需要排序的資料

cout<<"the set of data show as:"<&data,int p,int q,int r)

{ //將有序的data[p...q]與data[q+1...r]排序為有序的data[p...r]

vectordata_left;

vectordata_right;

for(int i=p;i<=q;i++)

data_left.push_back(data[i]);

for(int i=q+1;i<=r;i++)

data_right.push_back(data[i]);

int k=p,i=0,j=0;

for(;(i&data,int p,int r)

{ if(p時間複雜度:

分解:僅計算子陣列的中間位置,d(n)=o(1);

解決:遞迴分解問題,時間為2t(n/2);

合併:o(n)。

因此,t(n)=o(1)+2t(n/2)+o(n)=o(nlogn)  (遞迴樹共logn+1層,每一層都是cn)。

合併排序演算法

陣列ary的m個元素,ary p ary q ary q 1 ary r 已按曾序排序 使得ary p ary r 按曾序排列 void clibrary merge int ary,int p,int q,int r,int m else k 0 for i p i r i ary i bp k ...

合併排序演算法

合併排序是用分治策略實現的排序演算法之一。基本思想是 將待排序的元素分成大小大致相同的兩個子集合,分別對這兩個子集合進行排序,最後將排好序的子集合合併成所需要的集合。此方法的時間複雜度t n o nlogn 這種排序方法漸進最優演算法。合併排序 遞迴 include using namespace ...

合併排序演算法

合併排序演算法就是將多個有序資料表合併成乙個有序資料表。如果參與合併的只有兩個有序表,則稱為二路合併。排序流程 原始資料 67 65 77 38 97 3 33 49 34 第一遍 65 67 38 77 3 79 33 49 34 第二遍 38 65 67 77 3 33 49 97 34 第三遍...