简单排序Java实现(二):归并排序,快速排序

1,二路归并排序的时间复杂度是O(logn)。

2.快速排序:最坏时间复杂度为O(n2),最好复杂度是:O(nlogn),平均时间复杂度为O(nlogn),在所有的平均时间复杂度是O(nlonn)的算法中,快速排序的平均性能是最好的。


public class sortTest {
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		int i =0;
		int [] a={5,4,3,8,7};
		System.out.println("================归并排序===========================");
		int len =a.length;
		MergeSort(a,0,len-1);
		for (int j = 0; j < a.length; j++) {
			System.out.print(a[j]+" ");
		}
		System.out.println();
		System.out.println("================快速排序===========================");
		quickSort(a);
		for (int j = 0; j < a.length; j++) {
			System.out.print(a[j]+" ");
		}
	}
	//快速排序
	private static void quickSort(int[] a) {
		// TODO Auto-generated method stub
		sort(a,0,a.length-1);
	}
	private static void sort(int[] a, int low, int high) {
		// TODO Auto-generated method stub
	
		int i,j;
		int index;
		if(low>=high){
			return;
		}
		i=low;
		j=high;
		index=a[i];
		while(i<j){
			while(i<j && a[j]>=index){
				j--;
			}
			if(i<j){
				a[i++]=a[j];
			}
			while(i<j && a[i]<index){
				i++;
			}
			if(i<j){
				a[j--]=a[i];
			}
		}
		a[i]=index;
		sort(a,low,i-1);
		sort(a,i+1,high);
		
	}
	//归并排序
	private static void MergeSort(int[] a, int p, int r) {
		// TODO Auto-generated method stub
		if(p<r){
			int q=(p+r)/2;
			MergeSort(a,p,q);
			MergeSort(a,q+1,r);
			Merge(a,p,q,r);
		}
	}

	private static void Merge(int[] a, int p, int q, int r) {
		// TODO Auto-generated method stub
		int i,j,k,n1,n2;
		n1=q-p+1;
		n2=r-q;
		int[] L=new int[n1];
		int[] R=new int[n2];
		for (i = 0,k=p; i <n1; i++,k++) {
			L[i]=a[k];
		}
		for (i = 0,k=q+1; i <n2; i++,k++) {
			R[i]=a[k];
		}
		for(i=0,j=0,k=p;i<n1 && j<n2;k++){
			if(L[i]<R[j]){
				a[k]=L[i];
				i++;
			}else{
				a[k]=R[j];
				j++;
			}
		}
		if(i<n1){
			for(j=i;j<n1;j++,k++){
				a[k]=L[j];
			}
		}
		if(j<n2){
			for(i=j;i<n2;i++,k++){
				a[k]=R[i];
			}
		}
	}
}


猜你喜欢

转载自blog.csdn.net/qq_32261399/article/details/77802301