C語言實現歸併排序演算法

2021-08-07 11:57:30 字數 695 閱讀 3418

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

以下程式在dev c++中除錯執行通過。

#include#include#includetypedef struct

sqlist;

//將有序的sr[i...m]和sr[m+1...n]歸併為有序的tr[i...n]

void merge(int sr,int tr,int i,int m,int n)

} int main()

; memcpy(l.r, temp, 10*sizeof(int));

printf("歸併排序前:");

for(k=1;k<10;k++)

printf("%d,",l.r[k]);

printf("\n");

mergesort2(&l);

printf("歸併排序後:");

for(k=1;k<10;k++)

printf("%d,",l.r[k]);

printf("\n");

}

執行結果如圖所示。

該演算法的時間複雜度為o(nlogn),空間複雜度為o(n)。

C語言 實現歸併排序演算法

c語言 實現歸併排序演算法 歸併排序 merge sort 是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。乙個sjsrkelmt歸併排序的例子 對乙個隨機點的鍊錶進行排序 演算法描述 歸併操作的過程如下 特點 歸併排序是穩...

C語言實現歸併排序

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

歸併排序 C語言實現

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