C++ 算法 random_shuffle() 函数

定义和用法

random_shuffle() 函数用于随机重排数据范围内的元素顺序。

数据范围通过迭代器指定。

注意:若不设置随机种子,示例可能每次产生相同的排列顺序。

如需获得不同的随机排序,可以使用 srand() 函数初始化随机数生成器。为确保每次运行获得不同顺序,建议使用当前时间作为随机种子(如下面的例子所示)。

例子 1

随机重排 vector 元素:

vector<int> numbers = {1, 2, 3, 5, 7, 9};
random_shuffle(numbers.begin(), numbers.end());
for (int number : numbers) {
    cout << number << " ";  // 可能输出:9 2 7 5 1 3
}

例子 2

确保每次运行获得不同随机顺序:

vector<int> numbers = {1, 2, 3, 5, 7, 9};
srand(time(NULL));  // 以当前时间初始化随机种子
random_shuffle(numbers.begin(), numbers.end());
for (int number : numbers) {
    cout << number << " ";  // 每次运行输出不同顺序
}

语法

random_shuffle(iterator start, iterator end);

参数

参数 描述
start 必需。指向数据范围起始位置的迭代器。
end

必需。指向数据范围结束位置的迭代器。

将重排该位置之前的所有元素。

技术细节

  • 该函数不返回任何值,直接修改原始数据
  • 在 C++17 中已被标记为废弃,建议改用 shuffle() 函数配合随机数引擎
  • 时间复杂度为 O(n),其中 n 是数据范围的大小

相关页面

教程:C++ 数据结构

教程:C++ 迭代器

教程:C++ 算法