首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数组的10%置乱

将数组的10%置乱
EN

Stack Overflow用户
提问于 2020-11-14 16:29:29
回答 1查看 80关注 0票数 0

我如何才能只洗牌一个数组的10%,这样90%是原封不动的,而随机的10%是洗牌的?

我将排序算法应用于数组。我正在考虑使用rand(),但我不确定如何将混洗限制在只有10%。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-14 17:03:50

可能会有所改进,但您可能会这样做:

代码语言:javascript
复制
template <typename Rnd, typename IT>
void partial_shuffle(Rnd&& rnd, IT begin, IT end, std::size_t k)
{
    std::vector<std::size_t> indexes(std::distance(begin, end));
    std::iota(indexes.begin(), indexes.end(), 0);

    // Select subset to shuffle
    std::shuffle(indexes.begin(), indexes.end(), rnd);
    std::vector<std::decay_t<decltype(*begin)>> subset;
    
    for (std::size_t i = 0; i != k; ++i) {
        subset.push_back(*(begin + indexes[i]));   
    }

    // Shuffle the subset
    std::shuffle(subset.begin(), subset.end(), rnd);

    // place them at correct position
    for (std::size_t i = 0; i != k; ++i) {
        *(begin + indexes[i]) = subset[i];
    }
}

Demo

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64832120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档