合并排序代码

来源:互联网 发布:youtube网络无法连接 编辑:程序博客网 时间:2024/06/03 19:14

The mergeSort.java Program


// mergeSort.java

// demonstrates recursive mergesort

// to run this program: C>java MergeSortApp

import java.io.*// for I/O

////////////////////////////////////////////////////////////////

class DArray

{

private double[] theArray; // ref to array theArray

private int nElems; // number of data items

//----------------------------------------------------------

public DArray(int max) // constructor

{

theArray 
= new double[max]; // create array

nElems 
= 0;

}


//----------------------------------------------------------

public void insert(double value) // put element into array

{

theArray[nElems] 
= value; // insert it

nElems
++// increment size

}


//----------------------------------------------------------

public void display() // displays array contents

{

for(int j=0; j<nElems; j++// for each element,

System.out.print(theArray[j] 
+ " "); // display it

System.out.println(
"");

}


//----------------------------------------------------------

public void mergeSort() // called by main()

// provides workspace

double[] workSpace = new double[nElems];

recMergeSort(workSpace, 
0, nElems-1);

}


//----------------------------------------------------------

private void recMergeSort(double[] workSpace, int

lowerBound,

int upperBound)

{

if(lowerBound == upperBound) // if range is 1,

return// no use sorting

else

// find midpoint

int mid = (lowerBound+upperBound) / 2;

// sort low half

recMergeSort(workSpace, lowerBound, mid);

// sort high half

recMergeSort(workSpace, mid
+1, upperBound);

// merge them

merge(workSpace, lowerBound, mid
+1, upperBound);

}
 // end else

}
 // end recMergeSort

//----------------------------------------------------------

private void merge(double[] workSpace, int lowPtr,

int highPtr, int upperBound)

{

int j = 0// workspace index

int lowerBound = lowPtr;

int mid = highPtr-1;

int n = upperBound-lowerBound+1// # of items

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

}
 // end merge()

//----------------------------------------------------------

}
 // end class DArray

////////////////////////////////////////////////////////////////

class MergeSortApp

{

public static void main(String[] args)

{

int maxSize = 100// array size

DArray arr; 
// reference to array

arr 
= new DArray(maxSize); // create the array

arr.insert(
64); // insert items

arr.insert(
21);

arr.insert(
33);

arr.insert(
70);

arr.insert(
12);

arr.insert(
85);

arr.insert(
44);

arr.insert(
3);

arr.insert(
99);

arr.insert(
0);

arr.insert(
108);

arr.insert(
36);

arr.display(); 
// display items

arr.mergeSort(); 
// mergesort the array

arr.display(); 
// display items again

}
 // end main()

}
 // end class MergeSortApp


  
原创粉丝点击