#include
#include
#include
//归并排序 先划分 分别排序 然后归并
int helper[100];
void merger(int*a,int p,int mid,int r)
{
memcpy(helper,a,sizeof(int)*(r-p+1));
int left=p;//左侧队伍头部指针,指向带比较的元素
int right=mid+1;//右侧
int current=p;//原数组指针,指向代填入数据的位置;
while(left<=mid&&right<=r)
{
if(helper[left]<=helper[right])
{ a[current]=helper[left];
current++;
left++;
}else{
a[current]=helper[left];
current++;
right++;
}
}
while(left<=mid)
{
a[current]=helper[left];
current++;
left++;
}
}
void mergersort(int*a,int p,int r)
{
if(p<r)
{
int mid=(p+r)/2;
mergersort(a,p,mid);
for(int i=0;i<3;i++)
mergersort(a,mid+1,r);
for(int i=3;i<6;i++)
merger(a,p,mid,r);
}
}
main()
{
int a[]={1,3,5,7,9,2};
mergersort(a,0,5);
for(int i=0;i<6;i++)
printf("%d",a[i]);
}