洗牌算法

洗牌算法,顾名思义,就是只利用一次循环等概率的取到不同的元素(牌)。

如果元素存在于数组中,即可将每次 random 到的元素 与 最后一个元素进行交换,然后 count—,即可。

这相当于把这个元素删除,代码如下:

  1. #include<iostream>
  2. #include<ctime>
  3. usingnamespace std;
  4. constint maxn =10;
  5. int a[maxn];
  6. int randomInt(int a){
  7. return rand()%a;
  8. }
  9. void swapTwoElement(int*x,int*y){
  10. int temp;
  11. temp=*x;
  12. *x=*y;
  13. *y=temp;
  14. }
  15. int main(){
  16. int count =sizeof(a)/sizeof(int);
  17. int count_b = count;
  18. srand((unsigned)time(NULL));
  19. for(int i =0; i < count;++i){ a[i]= i;}
  20. for(int i =0; i < count_b;++i){
  21. int random = randomInt(count);
  22. cout<<a[random]<<" ";
  23. swapTwoElement(&a[random],&a[count-1]);
  24. count--;
  25. }
  26. }