洗牌算法

概述###

  • 洗牌算法(可以归类到随即算法中),顾名思义,就是只利用一次循环等概率的取到不同的元素(牌)。

描述###

  • 如果元素存在于数组中,即可将每次 random 到的元素 与 最后一个元素进行交换,然后 count--,即可。这相当于把这个元素删除,代码如下:
#include <iostream>
#include <ctime> 
using namespace std;

const int maxn = 10;
int a[maxn];

int randomInt(int a) 
{
    return rand()%a;
}

void swapTwoElement(int*x,int*y) 
{
     int temp;
     temp=*x;
     *x=*y;
     *y=temp;
}

int main()
{
    int count = sizeof(a)/sizeof(int);
    int count_b = count;
    /**
     *srand函数是随机数发生器的初始化函数。原型:void srand(unsigned int seed);
     *srand和rand()配合使用产生伪随机数序列。
     */
    srand((unsigned)time(NULL));
    //初始化数组 
    for (int i = 0; i < count; ++i) 
    { 
        a[i] = i; 
    }
    //随即的输出数组中的每一个数字 
    for (int i = 0; i < count_b; ++i) 
    {
        int random = randomInt(count);
        cout<<a[random]<<" ";
        swapTwoElement(&a[random],&a[count-1]);
        count--;
    }
    system("pause");
    return 0;
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 完美洗牌算法 题目描述: 有个长度为2n的数组 {a1, a2, a3, ..., an, b1, b2, b3,...
    MinoyJet阅读 3,895评论 0 2
  • 大家好,我是IT修真院深圳分院第02期学员,一枚正直善良的web程序员。 今天给大家分享一下,修真院官网JS任务0...
    与其感慨路难行阅读 1,035评论 0 4
  • 今天给大家分享一下:洗牌算法具体指的是什么。 一、背景介绍 洗牌算法是我们常见的随机问题,在玩游戏、随机排序时经常...
    slashnie阅读 3,343评论 0 0
  • 生在如今这个知识快速迭代、信息爆炸传播的时代,你我就像扑腾在湍急的水流中,如果不能寻找到泅渡自己的小舟,那么,我们...
    顾一宸阅读 3,381评论 29 108
  • 还是那个熟悉的地方,熟悉的环境,唯一不同的是,往日的风景已不在! 每当清晨的阳光升起,洗去了往日的陈旧,又是新的一...
    AAALH阅读 149评论 0 0