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 }