改进归并排序消除递归Java实现

思想很简单,我就不说了,下面是代码实现,一定要注意细节:

package data_structure;

public class MergeSortChange {

	private int array[];
	
	public MergeSortChange(){
		array=new int[]{3,7,4,2,10,8,5,4,8};
	}
	
	public MergeSortChange(int []a){
		array=new int[a.length];
		for(int i=0;i<a.length;i++){
			array[i]=a[i];
		}
	}
	
	public void mergeSort(){
		int n=array.length;
		int i=1,j=0;
		for(i=1;i<n;i=i*2){
			for(j=0;j<=n-1;j=j+2*i){
				if(j+i-1<n-1){
					if(j+2*i-1<=n-1){
						merge(j, j+i, j+2*i-1);
					}
					else if(j+2*i-1>n-1){
						merge(j, j+i, n-1);
					}
				}
			}
			for(int q:array)
				System.out.print(q+"  ");
			System.out.print("  i="+i+"\n");
		}
	}
	
	public void print(){
		for(int i=0;i<array.length;i++){
			System.out.print(array[i]+"  ");
		}
	}
	
	public void merge(int a,int b,int c){
		int temp[]=new int[c-a+1];
		int i=a,j=b,q=0;
		while(i<=b-1 || j<=c){
			if(i<=b-1 && j<=c){
				temp[q]=Math.min(array[i], array[j]);
				if(array[i]<array[j])
					i++;
				else
					j++;
			}
			else if(i>b-1 && j<=c){
				temp[q]=array[j++];
			}
			else if(i<=b-1 && j>c){
				temp[q]=array[i++];
			}
			q++;
		}
		for(int x:temp)
			array[a++]=x;
	}
	
	public static void main(String[] args) {
		int a[]={5,6,2,1,4,8,9,10,12,10,3};
		for(int x:a)
			System.out.print(x+"  ");
		System.out.println();
		MergeSortChange change=new MergeSortChange(a);
		change.mergeSort();
		change.print();
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值