c語言 實現歸併排序演算法
歸併排序(merge sort)是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法(divide and conquer)的乙個非常典型的應用。
乙個sjsrkelmt歸併排序的例子:對乙個隨機點的鍊錶進行排序
演算法描述
歸併操作的過程如下:
特點:歸併排序是穩定的排序.即相等的元素的順序不會改變, 速度僅次於快速排序,但較穩定。
歸併操作
歸併操作(merge),也叫歸併演算法,指的是將兩個順序序列合併成乙個順序序列的方法。
如:設有數列 [6,202,100,301,38,8,1]
初始狀態:6, 202, 100, 301, 38, 8, 1
第一次歸併後:[6, 202], [100, 301], [8, 38], [1],比較次數:3www.cppcns.com;
第二次歸併後:[6, 100, 202, 301],[1, 8, 38],比較次數:4;
第三次歸併後:[1, 6, 8, 38, 100, 202, 301],比較次數:4;
總的比較次數為:3+4+4=11,;
逆序數為14;
演算法實現
// completed on 2014.10.11 17:20
// language: c99
//// 版權所有(c)codingwu (mail: [email protected])
// 部落格位址:
#include
#includevoid merge_sort(int *list, const int first, const int last)
while( left_min < left_max )
while( index > 0 )
}} free(tmp);
}int main()
; int n, mid;
n = sizeof(a) / sizeof(a[0]);
mid = n / 2;
merge_sort(a, 0, n - 1);
for(int k = 0; k < n; k++)
printf("%d ", a[k]);
printf("\n");
return 0;
}使用遞迴實現:
// completed on 2014.10.11 18:20
// language: c99
//// 版權所有(c)codingwu (mail: [email protected])
// 部落格位址:
#include
#include
void merge(int *array,const int first, const int mid, const int last)
else
} while( first1 <= last1 )
while( first2 <= last2 )
for( i=0; i
本文標題: c語言 實現歸併排序演算法
本文位址:
C語言實現歸併排序演算法
歸併排序 merging sort 的原理是假設初始序列含有n個記錄,則可以看成n個有序的子串行,每個子串行的長度為1,然後兩兩歸併,得到n 2個長度為2或者1的子串行 再兩兩歸併,如此重複,直至得到乙個長度為n的有序序列為止,這種排序方法稱為2路歸併排序。以下程式在dev c 中除錯執行通過。in...
C語言實現歸併排序
歸併排序 時間複雜度 o nlogn 空間複雜度 o n 穩定性 穩定 實現原理 採用分治法 divide and conquer 將已有序的子串行合併,得到完全有序的序列,即先使每個子串行有序,再使子串行段間有序。若將兩個有序表合併成乙個有序表,也叫二路歸併。實現 採用遞迴方法實現 include...
歸併排序 C語言實現
merging sort 就是將兩個或兩個以上的有序表合併成一 個有序表的過程。將兩個有序表合併成個有序表的過程稱為2 路歸併,2 路歸併最為簡單和常用。演算法思想 假設初始序列含有n個記錄,則可看成是n個有序的子串行,每個子串行的長度為1,然後兩兩歸併,得到 n 2 個長度為2或1的有序子串行 再...