算法思想:将无序序列拆分至只有一个关键字的子序列;然后两两归并,直至归并成一个序列
时间复杂度分析:共需进行log2n趟排序,每趟排序执行n次归并操作,因此时间复杂度为O(nlog2n);时间复杂度与初始序列无关,平均和最好和最坏时间复杂度都是O(nlog2n)
空间复杂度:需要转存整个无序序列,空间复杂度为O(n)
代码:
void Merge(int arr[],int left,int mid,int right)
{
int i,k;
int left_min = left;
int left_max = mid;
int right_min = mid+1;
int right_max = right;
int *b = (int *)malloc((right-left+1)*sizeof(int)); //申请辅助空间,大小为两个子序列总的顶点数
for(k=0;left_min<=left_max&&right_min<=right_max;k++) //每次