前置知识
- merging sort,意思是将两个序列合并在一起,并且使之有序。
- 是分治法的一个典型应用:
本期内容
名词解释
实现
- 时间复杂度O(nlog^2n)
- 空间复杂度O(n)
- 稳定的算法
// 归并两个序列的算法
void Merge(int arr[],int tmp[], int start, int mid, int end)
{
int i=start, j=mid+1,k=start;
// 比较排序并将值赋给中间变量tmp
while(i != mid+1 && j!= end+1)
{
if(arr[i]>=arr[j])
tmp[k++] = arr[j++];
else
tmp[k++] = arr[i++];
}
// 若一个序列指针走到最后,另一个指针也走到最后,直接复制
while(i!=mid+1)
tmp[k++] = arr[i++];
while(j!=end+1)
tmp[k++] = arr[j++];
// 将中间变量数组中存储的值赋给原始数组
for(i=start;i<=end;i++)
arr[i]=tmp[i];
}
void MergeSort(int arr[], int tmp[], int start, int end)
{
int mid;
if(start < end)
{
// 取中间值将原序列分为两组
mid = (start + end)/2;
MergeSort(arr,tmp,start,mid);
MergeSort(arr,tmp,mid+1,end);
Merge(arr,tmp,mid,end);
}
}
总体评价
代码学习
履历