快速排序java代码

法一:

//快速排序 通过测试
public class QuickSortTest2 {
    public static void quickSort(int[] data,int low,int high){   //此处O(logn)
        int index;
        if(low<high) {
         index=partition(data,low,high);
            quickSort(data,low,index-1);         
            quickSort(data,index+1,high);  
        }
    } 

    public static int partition(int[] data, int i, int j) { // O(n)
            int k=data[i];
            while(i<j){
                while(i<j&&data[j]>=k)
                    j--;
                if(i<j)
                    data[i++]=data[j];
                while(i<j&&data[i]<=k)
                    i++;
                if(i<j)
                    data[j--]=data[i];
            }
            data[i]=k;
            return i;    
   } 
//-----------------------------------------------------------------------------
    public static void main (String args[]){
        int x[]={9,8,7,6,5,4,3,2,1};
        quickSort(x,0,x.length-1);     
        for(int i=0;i<x.length;i++){
            System.out.println(x[i]);
        }
    }
}

法二:

//快速排序 通过测试
public class QuickSortTest_ali {
     void quickSort(int[] data,int length){   
        if(length<=1) return;
        int start=0;
        int end=length-1;
        int pivot=data[0];
        while(start<end){
            for(;start<end;end--){
                if(data[end]<pivot){
                    data[start++]=data[end];
                    break;
                }
            }
            for(;start<end;start++){
                if(data[start]>pivot){
                    data[end--]=data[start];
                    break;
                }
            }
        }
        data[start]=pivot;
        quickSort(data,start);
        quickSort(data+start+1,length-start-1); 
    } 
//-----------------------------------------------------------------------------
    public static void main (String args[]){
        int x[]={9,8,7,6,5,4,3,2,1};
        quickSort(data,0,data.length-1);
        for(int i=0;i<x.length;i++){
            System.out.println(x[i]);
        }
    }
}

 时间复杂度:最好的情况和平均情况都是nlogn,最坏情况是n^2。

原文地址:https://www.cnblogs.com/seven7seven/p/3621226.html