快排非递归实现 + 算法可视化网站

算法可视化网站:https://visualgo.net/zh/

快速排序 非递归实现:

void quickSortNonRecursive(vector<int> &nums, int low, int height)
{
    stack<int> s;
    if (low<height)
    {
        int mid = getPartition(nums, low, height);
        if (mid-1>low)
        {
            s.push(low);
            s.push(mid - 1);
        }
        if (mid+1<height)
        {
            s.push(mid + 1);
            s.push(height);
        }

        while (!s.empty())
        {
            int qHeight = s.top();
            s.pop();
            int pLow = s.top();
            s.pop();
            int pqMid = getPartition(nums, pLow, qHeight);
            if (pqMid - 1 > pLow)
            {
                s.push(pLow);
                s.push(pqMid - 1);
            }
            if (pqMid + 1 < qHeight)
            {
                s.push(pqMid + 1);
                s.push(qHeight);
            }
        }

    }
}

递归实现:

size_t getPartition(vector<int> &v,size_t left,size_t right){ // 左闭,右闭
    int pivot=v[right]; ; // 
    int j=left;
    for(int i=left;i<right;i++){
        if(v[i]<=pivot){ // 遇到一个小于等于中轴 的。就把这个值给v[j].交换出来,j++
            int temp=v[j];
            v[j]=v[i];
            v[i]=temp;

            j++;
        }
    }
    // 把v[j]的位置放上pivot,然后v[j]的值交换出来放到右端
    v[right]=v[j];
    v[j]=pivot;

    return j;
}

void quickSort(vector<int> &v,size_t left,size_t right){
    if( (!(left<right)) ){ 
        return;
    }
    size_t mid=getPartition(v,left,right);
    quickSort(v,left,mid-1);
    quickSort(v,mid+1,right);
}

关于快速排序的优化:

快速排序优化 | PikachuBLOG http://blog.taoaili999.cn/2017/06/29/QuickSort-Optimization/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值