java描寫的合併排序的遞歸實現

package com.stu.find;

public class MergeSort {
	public   void  merge(int []A,int p,int q,int r)
	{
		int nl=q-p+1;
		int nr=r-q;
		int [] rArr=new int[nl+1];
		int [] lArr=new int [nr+1];

		for(int i=0;i<nl;i++)
		{
			rArr[i]=A[i+p];
		}

		for(int j=0;j<nr;j++)
		{
			lArr[j]=A[j+q+1];
		}


		rArr[nl] = Integer.MAX_VALUE;  
		lArr[nr] = Integer.MAX_VALUE;  
		int n=0;
		int m=0;
		//接下來進行比較
		for(int i=p;i<=r;i++)
		{
			if(m<=nl&&n<=nr)
			{
				//A[i]=lArr[m]<rArr[n]?lArr[m++]:rArr[n++];

				if(lArr[m]<rArr[n])
				{
					A[i]=lArr[m];
					m++;
				}
				else
				{
					A[i]=rArr[n];
					n++;
				}
			}
			else
			{
				if(m<nl)
				{
					A[i]=lArr[m];
					m++;
				}
				else
				{
					A[i]=rArr[n];
					n++;
				}
			}
		}

	}

	public void mergerSort(int []A,int p,int r)
	{   if(p == r){  
		return;  
	}else
	{
		int q=(r+p)/2;

		mergerSort(A,p,q);
		mergerSort(A,q+1,r);
		merge(A,p,q,r);
	}

	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int a[]={1,3,2,5,6,4,8,7,9,11,10};
		for(int i=0;i<a.length;i++)
		{
			System.out.print(a[i]);
		}
		System.out.println();
		int r=a.length-1;
		System.out.println("長度"+r);

		MergeSort MS=new MergeSort();
		MS.mergerSort(a,0,r);

		for(int i=0;i<a.length;i++)
		{
			System.out.print(a[i]+"    ");
		}
		System.out.println();
	}

}
相關文章
相關標籤/搜索