合并排序代码

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


  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值