Java将数组随机化

import java.util.Date;
import java.util.Random;
/*
 * 随即排列数组,给定一个数组,随即排列其中的元素,目前主要有两种方法
 */
public class Main {
	
	public static void main(String args[]){
		int data[]=new int[]{1,42,51,62,8,94,23,13,40,5};
		//int p[]=getRandom(1,-8,100);
		//show(p);
		show(data);
		permuteBySort(data);
		show(data);
		randomizeInPlace(data);
		show(data);
	}
	
	/*
	 * 随机排列数组,使用优先级方式,每个数组元素A[i] 对应一个优先级P[i],
	 * 然后依据优先级对数组进行排序
	 */
	private static void permuteBySort(int[] data)
	{
		int len=data.length;
		int len3=len*len*len;
		int P[]=getRandom(1,len3,len);
		
		//冒泡排序
		for(int i=len-1; i>0; i--)
		{
			for(int j=0; j<i ; j++)
			{
				if(P[j]>P[j+1])
				{
					int temp=data[j];
					data[j]=data[j+1];
					data[j+1]=temp;
					
					temp=P[j];
					P[j]=P[j+1];
					P[j+1]=temp;					
				}
			}
		}
	}
	/*
	 * 元素A[i]是从 元素A[i]到A[n]中随机选取的
	 */
	private static void randomizeInPlace(int[] data)
	{
		Date dt=new Date();
		Random random=new Random(dt.getSeconds());
		int len=data.length;
		for(int i=0; i<len; i++)
		{
			int pos=(int)(random.nextDouble()*(len-i+1)+i)-1;
			int temp=data[i];
			data[i]=data[pos];
			data[pos]=temp;
		}
	}
	
	/*
	 * 获得在a到b之间的n个随机数
	 */
	private static int[] getRandom(int a,int b,int n)
	{
		if(a>b)
		{
			int temp=a;
			a=b;
			b=temp;
		}
		
		Date dt=new Date();
		Random random=new Random(dt.getSeconds());
		int res[]=new int[n];
		for(int i=0; i<n; i++)
		{
				res[i]=(int)(random.nextDouble()*(Math.abs(b-a)+1))+a;
		}
		return res;
	}
	
	
	private static void show(int[] data)
	{
		System.out.println("========================");
		for(int i = 0; i < data.length; i++)
		{
			System.out.print(data[i] + "    ");
		}
		System.out.println();
		System.out.println("========================");
	}
}


/**
  * 数组乱序类
  * @author noam 
  */
 public class NRandom {
 
     /**
      * 对给定数目的自0开始步长为1的数字序列进行乱序
      * @param no 给定数目
      * @return 乱序后的数组
      */
     public static int[] getSequence(int no) {
         int[] sequence = new int[no];
         for(int i = 0; i < no; i++){
             sequence[i] = i;
         }
         Random random = new Random();
         for(int i = 0; i < no; i++){
             int p = random.nextInt(no);
             int tmp = sequence[i];
             sequence[i] = sequence[p];
             sequence[p] = tmp;
         }
         random = null;
         return sequence;
     }


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值