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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值