您的位置:首页 > 其它

二路归并排序

2013-10-10 10:47 337 查看
#include <stdio.h>

void MergeArray(int a[],int s,int m,int t)
{
int i = s;
int j = m+1;

int tmp[t+1];
int k=0;

while(i<=m && j<=t)
{
if(a[i] <= a[j])
{
tmp[k++] = a[i++];
}
else
{
tmp[k++] = a[j++];
}
}

while(i<=m)
{
tmp[k++] = a[i++];
}

while(j<=t)
{
tmp[k++] = a[j++];
}

for(i=0;i<k;i++)
{
a[s+i] = tmp[i];
}
}

void MergeSort(int a[],int s,int t)
{
if(s<t)
{
int m = (s+t)/2;
MergeSort(a,s,m);
MergeSort(a,m+1,t);
MergeArray(a,s,m,t);
}
}

void main()
{
int a[] = {1,9,8,2,0,9,1,5,6};
MergeSort(a,0,8);

int i;
for(i=0;i<=8;i++)
{
printf("%d->",a[i]);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: