必威体育Betway必威体育官网
当前位置:首页 > IT技术

[C/C++]洗牌算法

时间:2019-09-07 22:13:15来源:IT技术作者:seo实验室小编阅读:73次「手机版」
 

洗牌算法

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

int d[6];

int i,n,a,b,t;

int c,j;

void main() {

    srand(time(NULL));

    printf("shuffle 0..n-1 demo\n");

    for (n=1;n<=5;n++) {/* 测试1~5个元素 */

        printf("_____n=%d_____\n",n);

        j=1;

        for (c=1;c<=n;c++) j=j*c;/* j为n! */

        j*=n*2;

        for (c=1;c<=j;c++) {/* 测试n*2*n!次 */

            for (i=0;i<n;i++) d[i]=i;/* 填写0~n-1 */

            for (i=n;i>0;i--) {/* 打乱0~n-1 */

                a=i-1;b=rand()%i;

                if (a!=b) {t=d[a];d[a]=d[b];d[b]=t;}

            }

            printf("%04d:",c);

            for (i=0;i<n;i++) printf("%d",d[i]);

            printf("\n");

        }

    }

    printf("shuffle 1..n demo\n");

    for (n=1;n<=5;n++) {/* 测试1~5个元素 */

        printf("_____n=%d_____\n",n);

        j=1;

        for (c=1;c<=n;c++) j=j*c;/* j为n! */

        j*=n*2;

        for (c=1;c<=j;c++) {/* 测试n*2*n!次 */

            for (i=1;i<=n;i++) d[i]=i;/* 填写1~n */

            for (i=n;i>1;i--) {/* 打乱1~n */

                a=i;b=rand()%i+1;

                if (a!=b) {t=d[a];d[a]=d[b];d[b]=t;}

            }

            printf("%04d:",c);

            for (i=1;i<=n;i++) printf("%d",d[i]);

            printf("\n");

        }

    }

}

相关阅读

C++雾中风景12:聊聊C++中的Mutex,以及拯救生产力的Boos

笔者近期在工作之中编程实现一个Cache结构的封装,需要使用到C++之中的互斥量Mutex,于是花了一些时间进行了调研。(结果对C++标准库很

C++ 什么是句柄?为什么会有句柄?HANDLE

出处:http://www.cppblog.com/mymsdn/archive/2009/02/19/handle-in-windows.html从广义上,能够从一个数值拎起一大堆数据的东西都

C++关键字:explicit简介

有一段时间没有写博客,最近一段时间一直在补自己的C++知识,尤其是面向对象的部分。昨晚在看CPP的时候发现了一个有趣的关键字:explic

C++ 指针的引用和指向引用的指针

指向引用的指针 使用指针的一个简单例子就是:int v = 1; int *p = &v; 需要预先强调的是没有指向引用的指针!因为引用不是对象,没

用c/c++实现strncpy函数

strncpy函数介绍 1:strncpy是 C语言的库函数之一,来自 C语言标准库,定义于 string.h,char *strncpy(char *dest, const char *src, i

分享到:

栏目导航

推荐阅读

热门阅读