我是靠谱客的博主 忐忑期待,最近开发中收集的这篇文章主要介绍数组随机shuffle方法1、c++自带的shuffle()函数2、python自带shuffle()函数3、c++自己实现shuffle()函数4、python自己实现shuffle()函数,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
1、c++自带的shuffle()函数
在Python中我们会经常看到shuffle的随机排列函数,其可以将列表中的内容进行随机排列,但在C++中却需要自己去实现这样功能的函数(c++0x之前)。在c++0x之后这样的功能函数在标准库中已有对应的提供——std::shuffle。下面就对该函数做具体的介绍:
template <class RandomAccessIterator, class URNG>
void shuffle (RandomAccessIterator first, RandomAccessIterator last, URNG&& g);
函数功能:使用随机生成器g对元素[first, last)可行交换的容器内部元素进行随机排列,大概原理类似如下代码的功能
template <class RandomAccessIterator, class URNG>
void shuffle (RandomAccessIterator first, RandomAccessIterator last, URNG&& g)
{
for (auto i = (last-first) - 1; i > 0; --i) {
std::uniform_int_distribution<decltype(i)> d (0,i);
swap (first[i], first[d (g)]);
}
}
函数必须与标准库默认的随机生成器一起使用,随机生成器的头文件是<random>。如果要使用不需要传入随机生成器函数可以参照random_shuffle函数。
参数:
first, last
顺序容器迭代器的开头(begin)和结尾(end),在[first, end)这个区间内的数值将会被随机排序。顺序容器的迭代器必须是定义有swap函数的数据类型以及顺序容器也必须支持元素可交换。
g
唯一随机数生成器的一个实例,在头文件<random>中定义。 URNG 是 uniform random number generator 的缩写。
返回值:
None
用例:
#include <iostream>
#include <vector>
#include <algorithm> // std::move_backward
#include <random> // std::default_random_engine
#include <chrono> // std::chrono::system_clock
int main (int argc, char* argv[])
{
std::vector<int> v;
for (int i = 0; i < 10; ++i) {
v.push_back (i);
}
// obtain a time-based seed:
unsigned seed = std::chrono::system_clock::now ().time_since_epoch ().count ();
std::shuffle (v.begin (), v.end (), std::default_random_engine (seed));
for (auto& it : v) {
std::cout << it << " ";
}
std::cout << "n";
return 0;
}
2、python自带shuffle()函数
import random
alist = [1,2,3,4,5]
random.shuffle(alist)
print(alist)
3、c++自己实现shuffle()函数
#include <iostream>
#include <cstdlib>
#include <ctime>
#define random(a,b) (rand()%(b-a)+a)
void shuffle(vector<int> & array)
{
int nsize = array.size();
int n;
for(int i = 0; i < nsize; i++)
{
int tmp = random(i, nsize-1);
n = array[i];
array[i] = array[tmp];
array[tmp] = n;
}
}
4、python自己实现shuffle()函数
import random
list = [0, 1, 2, 3, 4, 5]
print(list)
def shuffle(input):
num = len(input)
for i in range(num):
tmp = random.randint(i, num-1)
input[i], input[tmp] = input[tmp], input[i]
return input
list = shuffle(list)
print(list)
最后
以上就是忐忑期待为你收集整理的数组随机shuffle方法1、c++自带的shuffle()函数2、python自带shuffle()函数3、c++自己实现shuffle()函数4、python自己实现shuffle()函数的全部内容,希望文章能够帮你解决数组随机shuffle方法1、c++自带的shuffle()函数2、python自带shuffle()函数3、c++自己实现shuffle()函数4、python自己实现shuffle()函数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复