package cn.ccnu.lzc;
import java.util.Random;
public class TopDownTwoWayMergeSort {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int maxSize=16;
DArray arr=new DArray(maxSize);
for(int i=0;i<maxSize;i++){
int n=new Random().nextInt(100);
arr.insert(n);
}
arr.display();
arr.mergeSort();
arr.display();
}
}
class DArray{
private int[] theArray;
private int nElems;
public DArray(int max){
theArray=new int[max];
nElems=0;
}
public void insert(int value){
theArray[nElems++]=value;
}
public void display(){
for(int i:theArray){
System.out.print(i+" ");
}
System.out.println();
}
public void mergeSort(){
int[] workspace=new int[nElems];
recMergeSort(workspace,0,nElems-1);
}
private void recMergeSort(int[] workspace, int lowerBound, int upperBound) {
// TODO Auto-generated method stub
if(lowerBound==upperBound){
return;
}
int m=lowerBound+(upperBound-lowerBound)/2;
recMergeSort(workspace,lowerBound,m);
recMergeSort(workspace,m+1,upperBound);
merge(workspace,lowerBound,m+1,upperBound);
}
private void merge(int[] 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(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++]=workspace[j];
}
}
}
二路归并排序
最新推荐文章于 2024-06-06 18:00:21 发布