归并排序

本文深入解析递归归并排序算法,从倒置完全二叉树的角度阐述了其时间复杂度为O(nlogn)的特性,并详细解释了空间复杂度为O(n+logn)的原理。通过具体代码实现,直观展示排序过程,旨在帮助读者理解排序算法的核心思想。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

递归实现,挺麻烦,时间复杂度为O(nlogn),归并排序的过程,像极了一颗倒置的完全二叉树,高度为logn,可以理解为,对每一个元素都要进行深度为logn的归并。

空间复杂度为O(n+logn)

void Merge(int in[],int out[],int i,int m,int n)
{
 int j,k,t;
 for(k=i,j=m+1; i<=m && j<= n; k++)
 {
  if(in[i]<in[j])
  {
      out[k]=in[i];
            i++;
  }
  else
  {
   out[k]=in[j];
      j++;
  }
 }
 if (i<=m)
 {
     for (t=0; t<=m; t++)
     out[k+t]=in[i+t];
 }
  if (j<=n)
 {
     for (t=0; t<=m; t++)
   out[k+t]=in[j+t];
 }
}

void  MSort(int arr[],int out[],int s,int t)
{
 int m;
 int TR2[MAXSIZE]={0};
 if(s==t)
 {
  out[s]=arr[s];   

}
 else
 {
     m=(s+t)/2;
  MSort(arr,TR2,s,m);
  MSort(arr,TR2,m+1,t);
  Merge(TR2,out,s,m,t);
 }
 

}

void main()
{
 int a[]={1, 5 , 2 };
 const int length = sizeof(a)/sizeof(int);
 int out[length]={0};
    MSort(a,out,0,length-1);
 int i=1;
for (i=0; i<length; i++)
  printf("%d ",out[i]);
 system("pause");

}

本文来自于《大话数据结构》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值