java实现归并算法

这个程序不是我原创的,是我在学习别人的程序上改的,想重新写出来的原因就是:作为用户我调用一个工具,我给你个数组,你给我个排好的数组就好了,还要输入起始点和终点显得很不智能。(其实我就是把一行代码封装到了一个函数中,是不是显得我很作)

我觉得归并算法相对于堆排序和快排原理比较简单,分析就不写出来了,下面是我的完整代码:

/**
 * 
 * @author Tacenee
 *
 */
public class GuiBingTest {	
	public static void main(String[] args) {
		int[] a= {2,4,9,6,1,3,5,8,7};
		GuiBing(a);
		System.out.println(Arrays.toString(a));
	}
	
	private static void GuiBing(int[] a) {		
		GB(a,0,a.length-1);
	}
	/**
	 * 
	 * @param a 需排序的数组
	 * @param start 排序起始位置
	 * @param end 排序结束位置
	 */
	private static void GB(int[] a,int start,int end) {
		// TODO Auto-generated method stub
		int middle=(start+end)/2;
		if(start<end) {
			GB(a,start,middle);
			GB(a,middle+1,end);
			GuiBingDG(a,start,end);
		}
	}
	
	private static void GuiBingDG(int[] a,int L,int R) {
		// TODO Auto-generated method stub
		int[] temp =new int[a.length];
		int k =L;
		int mid = (L+R)/2;
		int p1=L;
		int p2=mid+1;
		while(p1<=mid&&p2<=R) {
			if(a[p1]<=a[p2]) {
				temp[k++]=a[p1++];
			}else {
				temp[k++]=a[p2++];
			}
		}
		
		while(p1<=mid) {temp[k++]=a[p1++];}
		while(p2<=R) {temp[k++]=a[p2++];}
		
		for(int i=L;i<=R;i++) {
			a[i]=temp[i];
		}
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值