归并排序的效率:
归并排序的运行时间是O(N*logN)。复制的次数和N*log2N成正比,对于8个数据项的排序,要复制24次。8个数据项需要有3层,每层包含8次复制
public class mergeSort {
int[] array;
int size;
public mergeSort(int max)
{
array = new int[max];
size=0;
}
public void insert(int v)
{
array[size]=v;
size++;
}
public void display()
{
for(int i=0;i<size;i++)
System.out.print(array[i]+" ");
System.out.println();
}
public void mergeSort()
{
int[] workspace = new int[size];
recMergeSort(workspace,0,size-1);
}
private void recMergeSort(int[] workspace,
int lowerBound, int upperBound) {
// TODO Auto-generated method stub
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);
}
}
private void merge(int[] workspace, int lowPtr, int highPtr, int upperBound) {
// TODO Auto-generated method stub
int j=0; //workspace index
int low=lowPtr;
int mid=highPtr-1;
int n = upperBound-low+1;
while(lowPtr<=mid&&highPtr<=upperBound)
{
if(array[lowPtr]<array[highPtr])
workspace[j++]=array[lowPtr++];
else
workspace[j++]=array[highPtr++];
}
while(lowPtr<=mid)
workspace[j++]=array[lowPtr++];
while(highPtr<=upperBound)
workspace[j++]=array[highPtr++];
for(j=0;j<n;j++)
array[low+j]=workspace[j]; //把排好序的数组移回原来的数组
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
mergeSort ms = new mergeSort(100);
for(int i=5;i>0;i--)
{
ms.insert(i);
}
ms.display();
ms.mergeSort();
ms.display();
}
}