どうも、ちょげ(@chogetarou)です。
for文を使って配列(array)の要素をシャッフルしてランダムに並び替える方法を紹介します。
方法

for文を使って配列(array)の要素をシャッフルしてランダムに並び替えるには、フィッシャー–イェーツのシャッフルを使います。
まず、for文で配列のインデックスを逆順でループします。
ループ処理で、rand()を「ループ変数に1を足した値」で割った余りを取得します。
次に、swap()を呼び出します。
そして、swap()の第1引数に「配列のループ変数のインデックスの要素」、第2引数に「配列の取得した余りのインデックスの要素」を指定します。
//myArray=対象の配列
int length = size(myArray); //配列の要素数を取得
for (int i = length - 1; i >= 0; --i) {
int j = rand() % (i + 1); //ランダムなインデックスを取得
swap(myArray[i], myArray[j]); //要素を入れ替える
}
上記のfor文は、配列(array)の要素をシャッフルしてランダムに並び替えます。
使用例
#include <iostream>
#include <ctime>
using namespace std;
int main(void){
string nums[5] = { "one", "two", "three", "four", "five"};
srand(time(NULL));
int length = size(nums);
for (int i = length - 1; i >= 0; --i) {
int j = rand() % (i + 1);
swap(nums[i], nums[j]);
}
for(string item: nums) {
cout << item << endl;
}
return 0;
}
出力:
three
one
two
five
four
コメント