归并排序--算法

思路

归并排序(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 为三的话不搭
    
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员的修养

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值