21xrx.com
2024-09-20 06:11:04 Friday
登录
文章检索 我的文章 写文章
C++数组随机重排
2023-06-27 22:08:35 深夜i     --     --
C++ 数组 随机 重排 洗牌

在C++中,数组是一种非常常见的数据类型。有时候需要对数组进行重排,以实现随机排列的效果。在本文中,我们将介绍如何在C++中对数组进行随机重排。

首先,需要使用C++中的随机数生成器。C++提供了一个名为rand()的函数,该函数能够生成一个0到RAND_MAX之间的随机整数。但是,我们需要将rand()函数的返回值映射到我们需要的数组中。为此,我们需要使用以下代码:


int random_index(int min, int max) {

  static bool initialized;

  if (!initialized) {

    srand(time(0));

    initialized = true;

  }

  return min + (rand() % (max - min + 1));

}

上面的代码首先初始化随机数生成器,然后使用min和max参数计算出在指定范围内的随机索引。

接下来,我们可以使用以下代码来对数组进行随机重排:


void shuffle(int *arr, int size) {

  for (int i = 0; i < size - 1; i++) {

    int j = random_index(i, size - 1);

    if (i != j) {

      int temp = arr[i];

      arr[i] = arr[j];

      arr[j] = temp;

    }

  }

}

上面的代码使用了Fisher-Yates算法,该算法可以对数组进行随机重排。该算法的基本思想是遍历数组中的所有元素,将当前元素与随机选择的另一个元素交换。

对于每一个数组元素,我们随机选择一个比当前元素位置大的位置。然后我们与该位置上的元素交换,相当于“删除”(或说标记)该位置的元素并将交换来的元素添入该位置。循环结束后,我们就会得到一个随机排列的数组。

总结一下,我们可以使用C++中的rand()函数和Fisher-Yates算法对数组进行随机重排。这种技术可以用于生成各种游戏以及其他需要随机数据的应用程序。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复