归并排序

来源:互联网 发布:2016搞笑网络歌曲播放 编辑:程序博客网 时间:2024/06/07 07:18

归并排序的效率:

归并排序的运行时间是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 stubif(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 stubint j=0;   //workspace indexint 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++];elseworkspace[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 stubmergeSort ms = new mergeSort(100);for(int i=5;i>0;i--){ms.insert(i);}ms.display();ms.mergeSort();ms.display();}}


原创粉丝点击