简单的洗牌算法

/************************************************************************
实现原理产生随机数,交换数组中的值

************************************************************************/


#include "stdafx.h"

/************************************************************************
函数功能洗牌算法
   
参数1: 一副牌的整形数组
   
参数2: 数组长度
    
备注: #include <time.h>
          #include <stdlib.h>
************************************************************************/

void ChangCard(int aryBuffer[], int Len)
{
    int i, nModTemp, nChangeTemp;

    //
用时间作业参数来初始化随机数种子
    srand((unsigned)time(NULL));
    for (i = Len; i > 0; i--)
    {
        nModTemp = rand() % i;
        nChangeTemp = aryBuffer[i-1];
        aryBuffer[i-1] = aryBuffer[nModTemp];
        aryBuffer[nModTemp] = nChangeTemp;
    }
}


int main()
{
    int aryCartomancy[54] = 
    {
        1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13,
       14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
       27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 
       40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
       53, 54
    };
    int i;
    
    //
洗牌
    ChangCard(aryCartomancy, 54);
    //
显示一下
    for (i = 0; i < 54; i++)
    {
        printf("%d, ", aryCartomancy[i]);
        if (0 == (i+1) % 13)
        {
            printf("\r\n");
        }
    }

    system("pause");
    return 0;
}

posted on 2010-01-18 19:34  o无尘o  阅读(423)  评论(0编辑  收藏  举报