可以通過(guò)使用隨機(jī)數(shù)生成器來(lái)實(shí)現(xiàn)打亂數(shù)組的函數(shù)。一種簡(jiǎn)單的方法是使用Fisher-Yates算法,該算法將數(shù)組中的元素與隨機(jī)位置上的元素進(jìn)行交換,直到數(shù)組中的所有元素都被遍歷一遍。
以下是一個(gè)用C++實(shí)現(xiàn)Fisher-Yates算法的示例代碼:
#include <cstdlib>
#include <ctime>
#include <vector>
void shuffleArray(std::vector<int>& nums) {
srand(time(0));
for (int i = nums.size() - 1; i > 0; i--) {
int j = rand() % (i + 1);
std::swap(nums[i], nums[j]);
}
}
使用該函數(shù)可以對(duì)一個(gè)整數(shù)數(shù)組進(jìn)行隨機(jī)打亂。
在C++中生成隨機(jī)數(shù)可以使用標(biāo)準(zhǔn)庫(kù)中的<cstdlib>
頭文件中的rand()
函數(shù)。但是需要先調(diào)用srand()
函數(shù)來(lái)設(shè)置隨機(jī)數(shù)生成器的種子,可以使用當(dāng)前時(shí)間作為種子。
以下是一個(gè)簡(jiǎn)單的示例代碼:
#include <cstdlib>
#include <ctime>
int main() {
srand(time(0));
int randomNum = rand();
return 0;
}
可以通過(guò)對(duì)隨機(jī)數(shù)取模來(lái)獲得一個(gè)特定范圍內(nèi)的隨機(jī)數(shù),例如rand() % 100
可以生成一個(gè)0到99之間的隨機(jī)數(shù)。
C++標(biāo)準(zhǔn)庫(kù)中提供了std::shuffle
函數(shù)來(lái)對(duì)容器中的元素進(jìn)行隨機(jī)打亂。該函數(shù)在<algorithm>
頭文件中定義。
以下是一個(gè)簡(jiǎn)單的示例代碼:
#include <algorithm>
#include <vector>
int main() {
std::vector<int> nums = {1, 2, 3, 4, 5};
std::shuffle(nums.begin(), nums.end(), std::default_random_engine());
return 0;
}
使用std::shuffle
函數(shù)可以方便地對(duì)容器中的元素進(jìn)行隨機(jī)打亂。