package endual.xier.writeagain; public class Darray { private long[] theArray ; private int nElems ; public Darray(int max) {//构造数组 this.theArray = new long[max] ; this.nElems = 0 ; } public void insert(long value) { //插入数据 this.theArray[this.nElems] = value ; this.nElems++ ; } public void display() { //显示数组 for (long value :this.theArray) { System.out.println(value); } } public void mergeSort() { long[] workSpace = new long[this.nElems] ; recMergeSort(workSpace, 0, this.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) ; }//end else } private void merge(long[] workSpace, int lowPtr, //用这个数组将数组的两半归并成一个有序的数组。 int highPtr, int upperBound) { // TODO Auto-generated method stub int j = 0 ; int lowerBound = lowPtr ; int mid = highPtr - 1 ; int n = upperBound - lowerBound - 1 ; while (lowPtr <= mid && highPtr <= upperBound) { //值到两个数组的其中一个用完了 if (this.theArray[lowPtr] < this.theArray[highPtr]) { workSpace[j] = this.theArray[lowPtr] ; //将小的那个放入到工作的空间中去 j++ ; //工作的空间加1 lowPtr++ ; //最小的那个也加一 }else if (this.theArray[lowPtr] >= this.theArray[highPtr]) { workSpace[j++] = this.theArray[highPtr++] ; } } // end while1 while (lowPtr <= mid) { workSpace[j++] = this.theArray[lowPtr++] ; //直接复制进去 这两wihlt值能只执行一个的 } while (highPtr <= upperBound) { workSpace[j++] = this.theArray[highPtr++] ;//直接复制进去 这两wihlt值能只执行一个的 } for (j = 0; j < n; j++) { this.theArray[lowerBound+j] = workSpace[j] ; //进行复制 } } //end }
package endual.xier.writeagain; public class MergeSortApp { public static void main(String[] args) { Darray da = new Darray(100) ; for (int i = 0; i < 100; i++) { long value = (long) (Math.random() * 10000) ; da.insert(value) ; } da.display() ; System.out.println("-----------------------------"); da.mergeSort() ; da.display() ; } }
---------------------
我昏了,这个居然弄不出来哪里有错误啊,天煞的。