均匀随机排列数组

均匀随机排列数组

RandomizePlace(char * Arry,int len)
{
 int temp;
 for(iny i=0;i<len;i++)
 {
  index=BlockRand(i,len);
  temp=Arry[i];
  Arry[i]=arry[index];
  Arry[index]=temp;
  }
 }

int BlockRand(int a,int b)
{
int r;
r=rand()/RAND_MAX;
return a+r*(b-a);
}

Arry即为均匀随机排列数组。
随机排列数组满足这两个条件

  • 产生的排列个数是N!个
  • 每种排列的概率相同,即都为1/N!

Reference

[1].http://www.cnblogs.com/pangxiaodong/archive/2011/09/05/2167485.html

[2].算法导论.P66~P73

时间: 2024-10-19 04:15:47

均匀随机排列数组的相关文章

随机排列数组-algorithms_3th

1 #include <iostream> 2 #include <random> 3 #include<iterator> 4 using namespace std; 5 6 int rand_int(const int &up, const int &lo){ 7 uniform_int_distribution<> ran(up, lo); 8 random_device rd; 9 mt19937 gen(rd()); 10 ret

数组的完全随机排列

Array.prototype.sort 方法被许多 JavaScript 程序员误用来随机排列数组.最近做的前端星计划挑战项目中,一道实现 blackjack 游戏的问题,就发现很多同学使用了 Array.prototype.sort 来洗牌.就连最近一期 JavaScript Weekly上推荐的一篇文章也犯了同样的错误. 以下就是常见的完全错误的随机排列算法: function shuffle(arr){ return arr.sort(function(){ return Math.ra

【算法设计-随机算法】利用随机算法生成均匀随机排序数组

思想: 1.首先生成1到n的数组A 2.生成1到n^3的n个数的随机数组P 例如A=<1,2,3,4> P=<36,3,62,19> 3.对p数组进行从小到大的排序(利用快速排序),生成数组P1=<3,19,36,62> 4.根据3中P1的顺序,生成随机数数组A1=<2,4,1,3> 应用:腾讯面试题目 对于一个斗地主游戏,给出一个发牌的算法,让每个人的牌确保随机. 考虑假设有N张牌,要分出来M张牌,给K个人.我能想到的是,N张牌有N种排列,随机产生一种排列

java数组随机排序实现代码

例一 代码如下 复制代码 import java.lang.Math;import java.util.Scanner;class AarrayReverse{ public static void main(String args[]) { int a[]=new int[20]; for(int i=0;i<=15;i++) { Scanner sca=new Scanner(System.in); System.out.println("请输数组元素a["+"]&

php数组打乱顺序

shuffle() PHP shuffle() 函数随机排列数组单元的顺序(将数组打乱).本函数为数组中的单元赋予新的键名,这将删除原有的键名而不仅是重新排序. 语法: bool shuffle ( array &array ) 例子1: <?php $arr = range(1,8); print_r($arr); echo '<br />'; shuffle($arr); print_r($arr); ?> 输出: Array ( [0] => 1 [1] =&g

由抽奖软件想到的随机算法总结

整整三年没更新博客了,今天和女友聊天,聊到了博客,就回来看看. 最近接触到抽奖软件,下载的源码是http://download.csdn.net/detail/ghz_sd/6918125,在这里为开源软件作出贡献的人致敬,这个软件的作者a米山,是个非常好的人,耐心的帮我调试,他的算法很简单,就是纯粹的random,用的rand()函数,我给他提了个需求,写一个作弊类,实现的功能是:指定人的中奖概率提高,配置文件类似于这样: <xml> <win> <name='a' pro

读书笔记 -- 算法导论 (序言+第一部分)

什么是基础呢? 就是要把我们大学所学的离散数学,算法与数据结构,操作系统,计算机体系结构,编译原理等课程学好.对计算机的体系,CPU本身,操作系统内核,系统平台,面向对象编程,程序的性能等要有深层次的掌握.要编写出优秀的代码同样要扎实的基础,如果数据结构和算法学的不好,怎么对程序的性能进行优化,怎样从类库中选择合适的数据结构.如果不了解操作系统,怎样能了解这些开发工具的原理,它们都是基于操作系统的.不了解汇编,编译原理,怎么知道程序运行时要多长时间要多少内存,就不能编出高效的代码.把面向对象,软

仿苹果电脑任务栏菜单&amp;&amp;拼图小游戏&amp;&amp;模拟表单控件

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

Delphi基础语法的学习笔记和注意事项总结

以下是我在自学Delphi的时候,对一些注意点的简单总结,并没有什么系统性可言,只是一个学习时顺手记下的笔记,主要为了当时加深对知识的印象,并没有希望能在以后的复习和使用Delphi中有什么多大的参考作用.    缺少Delphi的各种数据类型的介绍……知识点. 1.     Delphi编译器自动对全局变量符初值.当程序开始时,所有的整型变量赋值为0,浮点数赋值为0.0,指针为null,字符串为空等等,因此,在源代码中不必对全局变量赋0初值 2.     Object Pascal允许在con