分治法合併排序(C )

2021-07-25 08:09:19 字數 673 閱讀 8265

參考**:

#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...