史上思路最清晰的快速排序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);
    }
}

感觉这个版本的排序思路清晰,以后遇到类似的就用此版本。

猜你喜欢

转载自blog.csdn.net/libinxxx/article/details/84380945