洗牌算法
洗牌算法,顾名思义,就是只利用一次循环等概率的取到不同的元素(牌)。
如果元素存在于数组中,即可将每次 random 到的元素 与 最后一个元素进行交换,然后 count—,即可。
这相当于把这个元素删除,代码如下:
1. #include <iostream>
2. #include <ctime>
3. using namespace std;
5. const int maxn = 10;
7. int a[maxn];
9. int randomInt(int a) {
10. return rand()%a;
11. }
12. void swapTwoElement(int*x,int*y) {
13. int temp;
14. temp=*x;
15. *x=*y;
16. *y=temp;
17. }
19. int main(){
20. int count = sizeof(a)/sizeof(int);
21. int count_b = count;
22. srand((unsigned)time(NULL));
23. for (int i = 0; i < count; ++i) { a[i] = i; }
24. for (int i = 0; i < count_b; ++i) {
25. int random = randomInt(count);
26. cout<<a[random]<<" ";
27. swapTwoElement(&a[random],&a[count-1]);
28. count--;
29. }
30. }
