參考**:
#include
#include
#include
using
namespace
std;
// 合併函式
void merge(int *arr, int p, int q, int r)
for (int j = 0; j < len2; j++)
l[len1]=r[len2]=int_max; //定義無窮大
int i = 0, j = 0;
for (int k = p; k <= r; k++)
else
}}// 歸併排序
void mergesort(int arr, int p, int r)
}int main()
cout
<< endl;
mergesort(arr,0,n-1);
cout
<< "排序後的陣列為:";
for(int j = 0;jcout
<" ";
}system("pause");
}
最差時間複雜度:o(nlogn)
平均時間複雜度:o(nlogn)
最差空間複雜度:o(n)
穩定性:穩定
分治法 合併排序
合併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用 分治法 divide and conquer 的乙個非常典型的應用。合併排序法是將兩個 或兩個以上 有序表合併成乙個新的有序表,即把待排序序列分為若干個子串行,每個子串行是有序的。然後再把有序子串行合併為整體有序序列。將已有序的子串行...
分治法 合併排序
排序演算法是對一組數進行順序排序或者逆序排序,而合併排序就是排序演算法的一種。合併排序用到了分治策略實現對元素進行排序。合併排序的基本思想 把待排序的n個元素分解成n組,也就是每組乙個元素 之後對分好的組進行兩兩合併 無配對的則不操作 以此類推。以序列為例,排序過程如下 合併排序又叫做2 路歸併排序...
分治法 用C 實現合併排序
合併排序的思想 當只有乙個元素時終止排序,超過乙個元素的話,將所有元素分成大致相同的兩個集合,分別對兩個集合進行排序,最後將排好序的子集合合併為所要求的排好序的集合。在最壞情況下,時間複雜度為o nlogn 它是乙個漸進的最優演算法。include include 這個函式將b 0 至b right...