C++11特性shuffle()

shuffle可随机打乱数组

使用场景,例如常见的快速排序,当数组元素很对且基本有序时,时间复杂度会退化成o(n2)。优化方式有很多种,这里结合c++11特性shuffle()函数, 来优化快排时间复杂度

    #include <iostream>
    #include <algorithm>
    #include <random>
    using namespace std;

    vector<int> sortArray(vector<int>& nums) 
    {
           shuffle(begin(nums), end(nums), default_random_engine(random_device()()));
           quicksort(nums, 0, nums.size()-1);
           return nums;
    }


    void quicksort(vector<int>& nums, int low,int hei)
    {
        if(low>=hei)
            return;
        int par=partion(nums, low, hei);
        quicksort(nums, low, par-1);
        quicksort(nums, par+1, hei);
    }
    int  partion(vector<int>& nums, int low, int hei)
    {
        int key=nums[low];
        while(low<hei)
        {
            while(low< hei&& key <= nums[hei])
            --hei;
            nums[low]=nums[hei];      
            while(low< hei&& nums[low]<= key)
                ++low;
            nums[hei]=nums[low];
        }
        nums[low]=key;
        return low;
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值