合并排序

用java代码写一段合并排序的程序

//合并排序
public class Hebing {
    public static void mergeSort(int [] a) {
    	int [] b=new int[a.length];
    	int s=1;        //开始时,让数组中的每个元素单独成为一个子数组
    	while(s<a.length) {
    		mergePass(a,b,s);               //合并到数组b
    		s+=s;                                   //合并一次,s就变成s+s
    		mergePass(b,a,s);              //合并到数组a
    		s+=s;
    	}
    	print(a);
    }
    //mergePass用于合并排好序的相邻数组段
    public static void mergePass(int [] x,int [] y,int s) {
    	int i=0;
    	while(i<=x.length-2*s) {
    		merge(x,y,i,i+s-1,i+2*s-1);
    		i=i+2*s;
    	}
    	if(i+s<x.length) {
    		merge(x,y,i,i+s-1,x.length-1);
    	}
    	else {
    		for(int j=i;j<x.length;j++) {
    			y[j]=x[j];
    		}
    	}
    }
    //合并c[l:m]和c[m+1:r]到d[l:r]
    public static void merge(int [] c,int [] d,int l,int m,int r) {
    	int i=l;
    	int j=m+1;
    	int k=l;
    	while((i<=m)&(j<=r)) {
    		if(c[i]<=c[j]) {
    			d[k]=c[i];
    			i++;
    			k++;
    		}
    		else {
    			d[k]=c[j];
    			j++;
    			k++;
    		}
    	}
    	if(i>m) {
    		for(int q=j;q<=r;q++) {
    			d[k]=c[q];
    			k++;
    		}
    	}
    	else {
    		for(int q=i;q<=m;q++) {
    			d[k]=c[q];
    			k++;
    		}
    	}
    }
    //输出数组a
    public static void print(int[] a){
		for(int n=0;n<a.length;n++){
			System.out.print(a[n]+" ");
		}
		System.out.println();
	}
    public static void main(String[] arg) {
    	int [] a= {1,5,4,55,89,46,23,75,61,2,7,9};
    	mergeSort(a);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值