歸併排序的C語言實現

2021-06-18 21:40:57 字數 923 閱讀 8116

歸併排序的核心思想是 divide-and-conquer 演算法,即將要解決的size為n的問題,分成a個size為n/b的子問題,這些子問題的結果經過o(n^d)的時間複雜度合併,即可解決最初的問題。所以,這一類的演算法,複雜度計算公式為 t(n) = a*t(n/b) + o(n^b)。

經過幾天的努力,終於將歸併排序用c語言實現了出來:

mergesort.h:

#define buff_size 3

typedef struct _array array;

int mergesort(array *);

int merge(array , array , array *);

mergesort.c:

#include #include #include "mergesort.h"

int main()

; array arr_main;

arr_main.length = buff_size;

arr_main.active = 0;

arr_main.elements = arr;

mergesort(&arr_main);

int i = 0;

for (i = 0; ilength > 1)

}}int merge(array arr_l, array arr_r, array *arr_m)

if (arr_r.length == 0)

if (arr_l.elements[arr_l.active] > arr_r.elements[arr_r.active])

else

}

上週日開始寫的這個程式,遇到了很多問題,也有很多收穫。只要不選擇放棄,肯定能解決遇到的問題~!

C語言實現歸併排序

歸併排序 時間複雜度 o nlogn 空間複雜度 o n 穩定性 穩定 實現原理 採用分治法 divide and conquer 將已有序的子串行合併,得到完全有序的序列,即先使每個子串行有序,再使子串行段間有序。若將兩個有序表合併成乙個有序表,也叫二路歸併。實現 採用遞迴方法實現 include...

歸併排序 C語言實現

merging sort 就是將兩個或兩個以上的有序表合併成一 個有序表的過程。將兩個有序表合併成個有序表的過程稱為2 路歸併,2 路歸併最為簡單和常用。演算法思想 假設初始序列含有n個記錄,則可看成是n個有序的子串行,每個子串行的長度為1,然後兩兩歸併,得到 n 2 個長度為2或1的有序子串行 再...

C語言實現歸併排序

歸併排序演算法完全遵循分治模式 偽 對分組歸併 merge a,p,q,r n1 q p 1 n2 r q let l 1.n1 1 and r 1.n2 1 be new arrays for i 1 to n1 l i a p i 1 for j 1 to n2 r j a q j l n1 1...