思路
归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而**治(conquer)**的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。
分:将无序序列分成有序的序列
治:将有效的序列进行合并
代码如下
//合并有序数组
void merge(int arr【】,int L,int M,int R){
int leftsize=M-L;
int rightsize=R-M+1;
int i,j;
int left【leftsize】,right【rightsize】;
for(i=L;i<M;i++)
{
left【i-L】=arr【i】;
}
for(j=M;j<=R;j++)
{
right【j-M】=arr【j】;
}
i=0;j=0;int k=L;
while(i<leftsize&&j<rightsize)
{
if(left【i】< right【j】)
{
arr【k++】=left【i++】;
}else
{
arr【k++】=right【j++】;
}
}
while(i<leftsize)
{
arr【k++】=left【i++】;
}
while(j<rightsize)
{
arr【k++】=right【j++】;
}
}
void mergesort(int arr【】,int L,int R){ //采用了递归的方式进行的合并
int M= (L+R)/2;
if(L==R){
return ;
}else {
mergesort(arr,L,M);
mergesort(arr,M+1,R);
merge(arr,L,M+1,R); //调用之所以用M+1 是因为从leftsize和rightsize可以看出
//还有取0 ---7 即M为4 为三的话不搭
}
}