• 洗牌算法

    洗牌算法

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

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

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

    1. #include <iostream>
    2. #include <ctime>
    3. using namespace std;
    4. const int 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. }