【转】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.     }  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值