#include<iostream>
#include<string>
#include<vector>
using namespace std;
/*
{
int n=rightTwo-leftOne+1; //要动态申请的数组大小
int *b=(int *)malloc(n*sizeof(int)); //申请一个数组
int i=leftOne,j=leftTwo,k=0;
while(i<=rightOne&&j<=rightTwo)
{
if(a[i]<=a[j])
{
b[k++]=a[i++];
}
else
b[k++]=a[j++];
}
if(i<=rightOne)
{
for(;i<=rightOne;i++)
b[k++]=a[i];
}
else if(j<=rightTwo)
{
for(;j<=rightTwo;j++)
b[k++]=a[j];
}
for(i=leftOne,j=0;i<=rightTwo&&j<n;i++,j++)
a[i]=b[j];
free(b);
{
int i=0;
while(i<n)
{
if(i+2*s-1<n)
merge(a,i,i+s-1,i+s,i+2*s-1);
else if(i+s<=n-1)
merge(a,i,i+s-1,i+s,n-1);
i=i+2*s;
}
{
int s=1;
while(s<n)
{
mergePass(a,s,n);
s+=s;
}
}
int main()
{
//char str[]=" the sky my good";
int a[]={4,25,3,2,16,8};
mergeSort(a,6);
for(int i=0;i<6;i++)
{
printf("%4d",a[i]);
}
getchar();
return 0;
}
#include<string>
#include<vector>
using namespace std;
/*
*/
//把数组的a[leftone...rightone]和a[leftTwo....rightTwo]合并
{
int n=rightTwo-leftOne+1; //要动态申请的数组大小
int *b=(int *)malloc(n*sizeof(int)); //申请一个数组
int i=leftOne,j=leftTwo,k=0;
while(i<=rightOne&&j<=rightTwo)
{
if(a[i]<=a[j])
{
b[k++]=a[i++];
}
else
b[k++]=a[j++];
}
if(i<=rightOne)
{
for(;i<=rightOne;i++)
b[k++]=a[i];
}
else if(j<=rightTwo)
{
for(;j<=rightTwo;j++)
b[k++]=a[j];
}
for(i=leftOne,j=0;i<=rightTwo&&j<n;i++,j++)
a[i]=b[j];
free(b);
}
{
int i=0;
while(i<n)
{
if(i+2*s-1<n)
merge(a,i,i+s-1,i+s,i+2*s-1);
else if(i+s<=n-1)
merge(a,i,i+s-1,i+s,n-1);
i=i+2*s;
}
}
//划分段从s=1 ,s=2,.....
{
int s=1;
while(s<n)
{
mergePass(a,s,n);
s+=s;
}
}
int main()
{
//char str[]=" the sky my good";
int a[]={4,25,3,2,16,8};
mergeSort(a,6);
for(int i=0;i<6;i++)
{
printf("%4d",a[i]);
}
getchar();
return 0;
}