`

【转】java随机排列数组

    博客分类:
  • java
阅读更多

转自:http://blog.csdn.net/liangjianyong/article/details/4941365

java随机排列数组

有时我们需要随机的排列数组中的元素,随机排列数组,目前常用的有两种方法,第一种就是元素A[i]对应一个优先级P[i],根据优先级作 为键值来从新排序数组;第二种方法就是A[i]随机的跟A[i]到A[n]中的任意个元素进行交换,n为数组的长度,下面是用java实现一个简单实现.

  1. import java.util.Date;  
  2. import java.util.Random;  
  3. /*  
  4.  * 随即排列数组,给定一个数组,随即排列其中的元素,目前主要有两种方法  
  5.  */   
  6. public   class  RandomSort {  
  7.       
  8.     public   static   void  main(String args[]){  
  9.         int  data[]= new   int []{1,42,51,62,8,94,23,13,40,5};  
  10.         //int p[]=getRandom(1,-8,100);   
  11.         //show(p);   
  12.         show(data);  
  13.         permuteBySort(data);  
  14.         show(data);  
  15.         randomizeInPlace(data);  
  16.         show(data);  
  17.     }  
  18.       
  19.     /*  
  20.      * 随机排列数组,使用优先级方式,每个数组元素A[i] 对应一个优先级P[i],  
  21.      * 然后依据优先级对数组进行排序  
  22.      */   
  23.     private   static   void  permuteBySort( int [] data)  
  24.     {  
  25.         int  len=data.length;  
  26.         int  len3=len*len*len;  
  27.         int  P[]=getRandom(1,len3,len);  
  28.           
  29.         //冒泡排序   
  30.         for ( int  i=len-1; i>0; i--)  
  31.         {  
  32.             for ( int  j=0; j<i ; j++)  
  33.             {  
  34.                 if (P[j]>P[j+1])  
  35.                 {  
  36.                     int  temp=data[j];  
  37.                     data[j]=data[j+1];  
  38.                     data[j+1]=temp;  
  39.                       
  40.                     temp=P[j];  
  41.                     P[j]=P[j+1];  
  42.                     P[j+1]=temp;                      
  43.                 }  
  44.             }  
  45.         }  
  46.     }  
  47.     /*  
  48.      * 元素A[i]是从 元素A[i]到A[n]中随机选取的  
  49.      */   
  50.     private   static   void  randomizeInPlace( int [] data)  
  51.     {  
  52.         Date dt=new  Date();  
  53.         Random random=new  Random(dt.getSeconds());  
  54.         int  len=data.length;  
  55.         for ( int  i=0; i<len; i++)  
  56.         {  
  57.             int  pos=( int )(random.nextDouble()*(len-i+1)+i)-1;  
  58.             int  temp=data[i];  
  59.             data[i]=data[pos];  
  60.             data[pos]=temp;  
  61.         }  
  62.     }  
  63.       
  64.     /*  
  65.      * 获得在a到b之间的n个随机数  
  66.      */   
  67.     private   static   int [] getRandom( int  a, int  b, int  n)  
  68.     {  
  69.         if (a>b)  
  70.         {  
  71.             int  temp=a;  
  72.             a=b;  
  73.             b=temp;  
  74.         }  
  75.           
  76.         Date dt=new  Date();  
  77.         Random random=new  Random(dt.getSeconds());  
  78.         int  res[]= new   int [n];  
  79.         for ( int  i=0; i<n; i++)  
  80.         {  
  81.                 res[i]=(int )(random.nextDouble()*(Math.abs(b-a)+1))+a;  
  82.         }  
  83.         return  res;  
  84.     }  
  85.       
  86.       
  87.     private   static   void  show( int [] data)  
  88.     {  
  89.         System.out .println( "========================" );  
  90.         for ( int  i = 0; i < data.length; i++)  
  91.         {  
  92.             System.out .print(data[i] +  "    " );  
  93.         }  
  94.         System.out .println();  
  95.         System.out .println( "========================" );  
  96.     }  

分享到:
评论

相关推荐

    JAVA随机数据库数组

    这2个函数实现了随机选择数据库中的题目,只需要读入界面端的每章题目数量,并按顺序排列,则可以从数据库中选择出所需要的题目的ID

    从n个数组中取出所有排列组合(Java实现)

    从n个数组中取出所有排列组合(Java实现)

    java源码包2

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    java源码包---java 源码 大量 实例

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    JAVA上百实例源码以及开源项目源代码

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    JAVA上百实例源码以及开源项目

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    java源码包4

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    java源码包3

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码) 15个目标文件 摘要:Java源码,初学实例,基于EJB的真实...

    魔板游戏Java课程设计报告.doc

    "Image "image " 表3-3 PuzzlePad.java主要成员变量(属性) "名称 "功能 "备注 " "PuzzlePad "创建魔板对象 "构造方法 " "随机排列数字 "随机排列魔板中方块上的数字 " " "随机排列图像 "随机排列魔板中方块上的...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码) 15个目标文件 摘要:Java源码,初学实例,基于EJB的真实...

    整数1~30(1-n)随机乱序排列,无重复数字,不用if判断。

    最近学java,数组部分有一题: 创建一个长度为6的int型数组,要求取值为1-30,同时元素值各不相同。解法如下: int[] arr = new int[6]; //随机生成1-30范围内数字 for (int i = 0; i &lt; arr.length; i++) {// ...

    随机生成10000数字,进行快速排序

    随机生成10000数字,进行快速排序,并输出排序后的数组,及耗时

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例044 利用数组随机抽取幸运观众 54 实例045 用数组设置JTable表格的列名与列宽 55 3.2 数组操作 57 实例046 数组的下标界限 57 实例047 按钮控件数组实现计数器界面 58 实例048 复选框控件数组 59 实例049 用数组...

    java 实现冒泡排序升序降序

    使用java实现冒泡排序 ...2.创建main函数,声明一个int数组,随机写入一些数字 3.sortAsc进行升序排列 4.使用双重for循环进行排序,当第一个数字大于第二个数字, 则交换位置 5.sortDesc则和上一步相反规则

    java联系题

    2. 设计一个Java程序,设有一个给定的int类型数组并有一批数据,现让你用二种以上的方法对其进行升或降序排列。 3. 写一个简单程序,判断输入的一串字符串是否为身份证号码,注意身份证判别的几个条件。 4. 设计一个...

Global site tag (gtag.js) - Google Analytics