核心算法
void m_merge(int *a,int start,int mid,int finish)
{
int i=start;
int j=mid+1;
int cache[MAX_LEN]= {0};
for(int k=start; k<=finish; k++)
{
cache[k]=a[k];
}
for(int k=start; k<=finish; k++)
{
if(i>mid )
{
a[k]=cache[j];
j+=1;
}
else if(j>finish)
{
a[k]=cache[i];
i+=1;
}
else if(cache[i]>cache[j])
{
a[k]=cache[j];
j+=1;
}
else
{
a[k]=cache[i];
i+=1;
}
}
}
自顶向下
void merge_sort(int *a,int start,int finish)
{
if(start>=finish) return;
int mid= (start+finish)/2;
merge_sort(a,start,mid);
merge_sort(a,mid+1,finish);
m_merge(a,start,mid,finish);
}
自下向顶
int m_min( int a,int b)
{
if(a>b) return b;
return a;
}
void merge_sort(int *a,int start,int finish)
{
int length=finish-start+1;
for(int i=1; i<length; i=i+i)
{
for(int j = start; j<finish-i; j+=i+i)
{
m_merge(a,j,j+i-1,m_min(j+i+i-1,finish));
}
}
}