归并排序算法的java实现

归并排序算法

基本思想:将待排序的序列(共n个元素)看成n个子序列,然后依次合并相邻的两个子序列,直至变成一个整体有序序列;

特点:稳定排序,非原地排序,时间复杂度O(nlogn);

算法实现:

public class MergeSort {
		public int[] merge(int[] a,int[] b){
		int al=a.length;
		int bl=b.length;
		int[] c=new int[al+bl];
		int indexA=0,indexB=0,indexC=0;
		while(indexA<al&& indexB<bl){
			int tmp;
			if(a[indexA]<b[indexB]){
				tmp=a[indexA];
				indexA++;
			}
			else{
				tmp=b[indexB];
				indexB++;
			}
	c[indexC++]=tmp;
	}
		while(indexA<al){
			c[indexC++]=a[indexA++];
		}
		while(indexB<bl){
			c[indexC++]=b[indexB++];
		}
		return c;
	}
	public int[] mergeSort(int[] num){
		if(num.length==1){
			 return num;
		}
		
		int half=num.length/2;
		int a[]=new int[half];
		for(int i=0;i<half;i++){
		a[i]=num[i];
		}
		int[] b=new int[num.length-half];
		int count=half;
		for(int j=0;j<num.length-half;j++){
			b[j]=num[count];
			count++;
		}
		int[] c=merge(mergeSort(a),mergeSort(b));
		return c;
	}
public static void main(String args[]){
	int a[]={1,54,68,45,89,74,23};
	MergeSort ms=new MergeSort();
	int[] result=ms.mergeSort(a);
	for(int i=0;i<a.length;i++){
		System.out.println(result[i]);
	}
}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值