演算法思想:假定無序序列中有n個元素,則可以看成是n個有序的子串行,每個子串行長度為1.然後兩兩合併,得到n/2個長度為2或1的有序序列,再兩兩歸併…如此重複之下,直到合併成長度為n的有序序列為止。
形如無序序列,兩兩歸併如下圖:
c語言**:
#include
#include
#define len 10
//進行歸併
void
merge
(int a,
int low,
int mid,
int high)
for(i=low,j=mid+
1,k=i;i<=mid&&j<=high;k++
)while
(i <= mid)
while
(j <= high)
}//歸併排序
void
mergesort
(int a,
int low,
int high)
}int
main()
;int i;
printf
("未排序前:\n");
for(i=
0;i)printf
("\n經過排序後:\n");
mergesort
(a,0
, len-1)
;for
(i=0
;i)}
如果以上程式或解釋有問題,請務必指出互相交流。 C語言實現歸併排序演算法
歸併排序 merging sort 的原理是假設初始序列含有n個記錄,則可以看成n個有序的子串行,每個子串行的長度為1,然後兩兩歸併,得到n 2個長度為2或者1的子串行 再兩兩歸併,如此重複,直至得到乙個長度為n的有序序列為止,這種排序方法稱為2路歸併排序。以下程式在dev c 中除錯執行通過。in...
C語言 實現歸併排序演算法
c語言 實現歸併排序演算法 歸併排序 merge sort 是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。乙個sjsrkelmt歸併排序的例子 對乙個隨機點的鍊錶進行排序 演算法描述 歸併操作的過程如下 特點 歸併排序是穩...
C語言實現歸併排序
歸併排序 時間複雜度 o nlogn 空間複雜度 o n 穩定性 穩定 實現原理 採用分治法 divide and conquer 將已有序的子串行合併,得到完全有序的序列,即先使每個子串行有序,再使子串行段間有序。若將兩個有序表合併成乙個有序表,也叫二路歸併。實現 採用遞迴方法實現 include...