合并排序算法(java)

今天又写了个合并排序算法,传上来供大家参考一下,还望多提意见!

import java.util.Calendar;
public class MergeSort{
	//把排好序的两个数组合并起来
	public static void merge(int[] a,int begin,int end,int k){//
		int[] a1 = new int[k+1-begin];
		int[] a2 = new int[end-k];
		System.arraycopy(a,begin,a1,0,a1.length);
		System.arraycopy(a,k+1,a2,0,a2.length);
		int i=0,j=0;
		int n;
		for(n=begin;n<=end;n++){
			if(i < a1.length && j < a2.length){
				if(a1[i] <= a2[j]){
				a[n] = a1[i];
				i++;
				}
				else{
					a[n] = a2[j];
					j++;
				}
			}else{
				break;
			}						
		}	
		if(i == a1.length){
		  System.arraycopy(a2,j,a,n,a2.length-j);
		}
		if(j == a2.length){
		  System.arraycopy(a1,i,a,n,a1.length-i);
		}
	}
	//把数组拆分之后排序
	public static void split(int[] c,int begin,int end){
	
		if(begin != end){
		  int k = (begin+end)/2;
			split(c,begin,k);
			split(c,k+1,end);
			merge(c,begin,end,k);
		}			
	}
	public static void main(String[] args){
		int[] arr = new int[1000000];
		for(int i=0;i<arr.length;i++){
			arr[i] = (int)(arr.length * Math.random());
		}		
		Calendar c = Calendar.getInstance();
		System.out.println(c.getTime());
		split(arr,0,arr.length-1);
		c = Calendar.getInstance();
		System.out.println(c.getTime());
	}

}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值