分治思想
//归并
void Merge(int R[],int left,int right)
{
int mid=(left+right)/2;
int *p=(int *) malloc(sizeof(int)*(right-left+1));
int i=left,j=mid+1;
int k=0;
while(i<=mid&&j<=right){
if(R[i]>R[j]){
p[k++]=R[j++];
}else{
p[k++]=R[i++];
}
}
while(i<=mid)
p[k++]=R[i++];
while(j<=right)
p[k++]=R[j++];
k=0;
while(left<=right){
R[left++]=p[k++];
}
free(p);
}
//归并排序
void MergeSort(int R[],int left,int right)
{
if(left<right){
int mid=(left+right)/2;
MergeSort(R,left,mid);
MergeSort(R,mid+1,right);
Merge(R,left,right);
}
}
本文深入探讨了分治思想在算法领域的应用,特别聚焦于归并排序这一高效排序算法。通过详细解析归并过程,展示了如何利用分治策略实现稳定的O(n log n)时间复杂度排序。
2148

被折叠的 条评论
为什么被折叠?



