排序演算法 歸併排序

2021-07-11 21:24:00 字數 1011 閱讀 1683

「歸併」一詞在中文含義中就是合併的意思,而在資料結構中的定義是將兩個或者兩個以上的有序表組合成乙個新的有序表,就叫歸併。

這個演算法的思路基於如下事實:假設我已經有兩個有序的陣列,我肯定是可以把它們插在一起,變成乙個有序的大陣列的。

所以這個演算法分為兩步:

1.「歸」。將乙個大陣列不停的分解,直到剩下2個元素,然後我會對它們排序。

2.「並」。將兩個排好序的2個元素的陣列(或者是乙個2個元素,乙個1個元素)合併成乙個有序的大陣列。依次類推。

時間複雜度:o(nlogn)  穩定

歸併排序(merge sort)就是利用歸併的思想實現的排序方法。它的原理是假設初始序列有n個記錄,則可以看成是n個有序的子串行,每個子串行的長度為1,然後兩兩歸併,得到⌈n/2⌉個長度為2或1的有序子串行;再兩兩歸併,……,如此重複,直至得到乙個長度為n的有序序列為止,這種排序方法稱為2路歸併排序。

//歸併排序(遞迴操作)

#include "stdafx.h"

#include#define maxsize 10

//實現歸併,把最後的結果存放在list1中

void merging(int *list1, int list1_size, int *list2, int list2_size) }

int main()

; mergesort(a, 10);

printf("排序後的結果是:");

for (i = 0; i<10; i++)

printf("\n");

return 0;

}

排序演算法 歸併排序

歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。首先考慮下如何將將二個有序數列合併。這個非常簡單,只要從比較二個數列的第乙個數,誰小就先取誰,取了後就在對應數列中刪除這個數。然後再進行比較,如果有數列為空,那直接將另...

排序演算法 歸併排序

include include define status int define max 20 typedef struct elemtype typedef struct sqlist void inital sqlist l 初始化 bool lt int i,int j void merge ...

排序演算法 歸併排序

歸併排序的思想其實完全是分治法的思想的體現,它完全遵循分治法的模式。這裡有必要再重提下分治法的思想 將原有的問題分解為幾個規模較小的但類似於原問題的子問題,遞迴的求解這些子問題,然後再合併這些子問題的解來求得原問題的解。現在來看看歸併排序的操作 1 將等待排序的含有 n 個元素的序列分解成各具有 n...