您的位置:首页 > 其它

归并排序 分治法

2016-01-08 15:45 197 查看
核心算法

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));
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: