public class MergeSort {
long theArray[];
public void doMerge() {
recMergeSort(new long[theArray.length], 0, theArray.length-1);
}
//把两个有序数组合并一个有序数组
/*
* lower
*/
private void merge(long[] workSpace, int lower, int high, int upperBound) {
int k = 0;
int lowerBound = lower;
int mid = high - 1;
int n = upperBound - lowerBound + 1;
while(lower <= mid && high <= upperBound) {
if(theArray[lower] < theArray[high]) {
workSpace[k++] = theArray[lower++];
} else {
workSpace[k++] = theArray[high++];
}
}
while(lower <= mid) {
workSpace[k++] = theArray[lower++];
}
while(high <= upperBound) {
workSpace[k++] = theArray[high++];
}
//覆盖原来的那些数组
for(int j = 0; j < n; j++) {
theArray[j+lowerBound] = workSpace[j];
}
}
//后序排序,从小到大不断合并有序数组
public 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);
}
}
public long[] getTheArray() {
return theArray;
}
public void setTheArray(long[] theArray) {
this.theArray = theArray;
}
}