Chinaunix首页 | 论坛 | 博客
  • 博客访问: 904463
  • 博文数量: 73
  • 博客积分: 2689
  • 博客等级: 少校
  • 技术积分: 897
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-07 19:39
个人简介

一个有目标,为自己的未来努力奋斗的人

文章分类
文章存档

2015年(9)

2014年(2)

2013年(6)

2012年(11)

2011年(33)

2010年(12)

分类: C/C++

2011-04-06 15:52:10

该算法确实实用,并具有研究价值,特转摘至这里与众乐乐^_^

       以下的函数permutation用于产生从0到n-1的无重复随机数,并将结果保存到数组z_array中。程序中使用buffer作为已使用随机数的记录数组,假定下一次产生一个随机数的(产生随机数的范围在不断缩小:rand()%(n-i))为z,遍历buffer,统计不大于该随机数且已使用过的随机数的个数,记为k,将z+k添加进z_array中,作为产生的下一个随机数,如此重复。这样便生成了从0到n-1的无重复的随机数。

void permutation(int n, int *z_array)
{
    int i, j, k, z;
    int buffer[N];

    /* 初始化数组 */
    for (i=0; i<n; i++)
        buffer[i]=0;

    /* 准备生成随机数,以当前时间为种子 */
    srand((unsigned)time((long *)0));

    /* 获得不重复的随机数据 */
    for (i=0; i<n; i++) {
        /* 获得0~(n-i)的随机数据 */
        z = rand()%(n-i);
        j=0; k=0;
        while (j<=z) {
            if (buffer[j+k]==0) j++;
            else k++;
        }
        buffer[j+k-1]=1;
        z_array[i]=j+k-1;
    }
    return;
}


阅读(807) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~