1. 程式人生 > >史上思路最清晰的快速排序C++

史上思路最清晰的快速排序C++

template<class Type>
int partition(SqList<Type>& List,int low,int high)
{
    ElementType<Type>elem=List.elem[low];//以陣列的第一個數作為基準數
    Type pivotkey=elem.key;//基準數賦值
    int i=low,j=high;
    while(i<j)//大迴圈控制搜尋結束條件,i>=j時搜尋結束
    {
        while(i<j&&elem[j]>=pivotkey)j--;//當從右邊往左搜尋時,找第一個小於基準數的數
        if(i<j){elem[i]=elem[j];i++;}//找到了,將該數賦值到i所在的位置,因為i是從左往右的。
        while(i<j&&elem[i]<=pivotkey)i++;
        if(i<j){elem[j]=elem[i];j++}
    }
    List.elem[j]=elem;//最後將基準數賦值到中間位置,也就是大小分界線位置
    return j;//返回分界線位置
}

快排的一次排序結果。

template<class Type>void Quicksort(SqList<Type>& List,int low,int high)
{
    if(low<high)
    {
    int pivot=partition(List,low,high);
    Quicksort(List,low,pivot-1);
    Quicksort(List,pivot+1,high);
    }
}

感覺這個版本的排序思路清晰,以後遇到類似的就用此版本。