[每周一算法]归并排序

来源:互联网 发布:破解苹果mac密码 编辑:程序博客网 时间:2024/05/29 02:05

 

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;}}

原创粉丝点击