歸併排序(2 路歸併排序)

2021-09-12 14:26:29 字數 671 閱讀 5885

遞迴寫法:

#include#define maxn 100

void merge(int a,int l1,int r1,int l2,int r2) //將陣列a的區間[l1,r1]和區間[l2,r2]合併為乙個有序區間

else

}while(i<=r1)

while (j<=r2)

for(int i=0;i非遞迴寫法:

#includeusing namespace std;

#define maxn 100

int n,a[maxn];

void merge(int a,int l1,int r1,int l2,int r2) //將陣列a的區間[l1,r1]和區間[l2,r2]合併為乙個有序區間

else

}while(i<=r1)

while (j<=r2)

for(int i=0; ivoid mergesort(int a) //將陣列a排序

} }}int main()

//int a= ;

mergesort(a);

for(int i=1; i<=7; i++)

return 0;

}

2 路歸併排序

歸併排序的時間複雜度為o nlog2n 利用二路歸併排序時,需要利用與待排序序列長度相同的陣列作為臨時儲存單元,故該排序方法的空間複雜度o n 由於二路歸併排序中,每兩個有序子串行合併成乙個有序序列時,若分別在兩個有序子串行中出現有相同關鍵字的記錄,則會使前乙個有序子串行中相同關鍵字的記錄先複製,後...

2 路歸併排序

假設初始序列含有n個記錄,則可看成是n個有序子串行,每個子串行的長度為1,然後兩兩歸併,得到 n 2 個長度為2或1的有序子串行 再兩兩歸併,如此重複,直至得到乙個長度為n的有序序列為止,這種排序方法稱為2 路歸併排序。2 路歸併排序中的核心操作是將一維陣列中前後相鄰的兩個有序序列歸併為乙個有序序列...

(2 路)歸併排序

2 路歸併的原理 將序列兩兩分組,將序列歸併為 n 2 向上取整 個組,組內單獨排序 然後將這些陣列再兩兩歸併,生成 n 4 向上取整 個組,組內再單獨排序 以此類推,直到只剩下乙個組為止。歸併排序的事件複雜度為 o nlogn 2 路歸併的遞迴寫法 include const int maxn 1...