码迷,mamicode.com
首页 > 编程语言 > 详细

随机洗牌算法

时间:2017-11-28 13:26:49      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:时间   for   mes   nbsp   pac   oid   size   include   put   

随机洗牌算法:

时间和空间复杂度都为O(n)。

 1 #include <bits/stdc++.h>
 2 
 3 using namespace std;
 4 
 5 const int maxn = 54;
 6 
 7 void random_shuffle(vector<int> &a)
 8 {
 9     srand(int(time(0)));
10     int aSize = a.size();
11     for(int i = 1; i != aSize; ++i) {
12         int j = rand() % (i + 1);
13         if(i != j) swap(a[i], a[j]);    // 每次都和前面的某一个数进行交换
14     }
15 }
16 
17 int main() {
18     vector<int> a;
19     for(int i = 1; i <= maxn; i++) a.push_back(i);
20     random_shuffle(a);
21     for(int i = 0; i < maxn; i++) printf("%d ", a[i]);
22     puts("");
23     return 0;
24 }

 可以由概率算出,每个数(每张牌)在每个位置的概率都是1/maxn。

随机洗牌算法

标签:时间   for   mes   nbsp   pac   oid   size   include   put   

原文地址:http://www.cnblogs.com/jacen789/p/7820089.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!