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

2022-10-04 01:33:13 字數 1529 閱讀 8393

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的有序子串行 再...