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];
}
}
}
}