您的位置:首页 > 其它

归并排序

2013-06-22 11:45 106 查看
递归实现,挺麻烦,时间复杂度为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");

}

本文来自于《大话数据结构》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: