改进快速排序

时间:2014-02-27 12:31:42

标签: quicksort

您好我正在尝试使用三个数字改进的中位数来实现快速排序算法。我正在使用计数器来监控算法的交换次数。事实证明,未改进版本的交换数量远少于改进版本。以下代码有什么问题?感谢。

public static void improved_quicksort(int[] A,int l, int r){
    if (r>l){       
        int i=improved_partition(A,l,r);
        improved_quicksort(A,l,i-1);
        improved_quicksort(A,i+1,r);
    }
}   

public static int improved_partition(int[] A,int l, int r){
    int i=l;
    int j=r;


    //Median of three Method Starts here
    int mid=(l+r)/2;    
    int x=median(l,mid,r);
    int temp;

    if (x==A[i]){
        x=i;
    }
    else if (x==A[j]){
        x=j;
    }
    else{
        x=mid;
    }       


    //Swapping of A[x] and A[r]
    temp=A[x];
    A[x]=A[r];
    A[r]=temp;



    int v=A[r];

    while (i<j){
        while (A[i]<v){
            i++;
        }
        while ((i<j)&&(A[j]>=v)){
            j--;
        }
        if (i<j){

            temp=A[i];
            A[i]=A[j];
            A[j]=temp;
        }
        else{

            temp=A[i];
            A[i]=A[r];
            A[r]=temp;
        }
    }   
    return i;
}

0 个答案:

没有答案