package DiGui;class DArray{ private long[] theArray; private int nElems; public DArray(int max){ theArray=new long[max]; nElems=0; } public void insert(long value){ theArray[nElems]=value; nElems++; } public void display(){ for(int j=0;j<nElems;j++) System.out.print(theArray[j]+" "); System.out.println(" "); } public void mergeSort(){ //需要额外的空间存储数组 long[] workSpace=new long[nElems]; recMergeSort(workSpace,0,nElems-1); } private void recMergeSort(long [] workSpace,int lowerBound,int upperBound){ if(lowerBound==upperBound) return; else { int mid=(lowerBound+upperBound)/2; recMergeSort(workSpace,lowerBound,mid); recMergeSort(workSpace,mid+1,upperBound); merge(workSpace,lowerBound,mid+1,upperBound); } } private void merge(long [] workSpace,int lowPtr,int highPtr,int upperBound){ int j=0; int mid=highPtr-1; int lowerBound=lowPtr; int n=upperBound-lowerBound+1; while(lowPtr<=mid&&highPtr<=upperBound) if(theArray[lowPtr]<theArray[highPtr]) workSpace[j++]=theArray[lowPtr++]; else workSpace[j++]=theArray[highPtr++]; while(lowPtr<=mid) workSpace[j++]=theArray[lowPtr++]; while(highPtr<=upperBound) workSpace[j++]=theArray[highPtr++]; for(j=0;j<n;j++) theArray[lowerBound+j]=workSpace[j]; }}public class MergeSortApp {
/** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub int maxSize=100; DArray arr; arr=new DArray(maxSize); arr.insert(64); arr.insert(55); arr.insert(77); arr.insert(33); arr.insert(22); arr.insert(11); arr.insert(99); arr.mergeSort(); arr.display(); }
}