1. 给N张扑克牌和一个随机函数,设计一个洗牌算法 [CC150]

关键点:如何保证每张牌等概率地出现在每个位置

 伪码如下

for i in 1…n:
    randomly select a card j from [1,i]
    swap card i with card j

C++实现

 1 void shuffle(vector<int> cards, int n) {
 2     if (cards.empty()) {
 3         return;
 4     }
 5     srand(time(0));
 6     for (int i = 1; i <= n; i++) {
 7         int j = 1 + rand() % i;        
 8         swap(cards[i - 1], cards[j - 1]);
 9     }
10 }
shuffle

相关文章: