从一个长度为n的数组中随机选择m个数

来源:互联网 发布:算法第四版答案pdf 编辑:程序博客网 时间:2024/04/29 05:33

基本思想:

                首先在下标0---n之间随机生成一个下标,将这个下标对应的数和数组的第一个数交换位置;然后从小标1----n之间随机生成一个数,将下标对应的

数和数组的第二个数交换位置。依次这样下去,知道找出m个数。

public class RandomM {public static void main(String[] args) {// TODO Auto-generated method stubint[] arr=new int[10];for(int i=0;i<10;i++){arr[i]=i;}for(int n: selectM(arr, 5)){System.out.println(n);}}//从长度为n的数组中随机的选择m个整数public static int[] selectM(int[] arr,int m){int len=arr.length;if(m>arr.length)throw new RuntimeException("xxxxx");int[] res=new int[m];for(int i=0;i<m;i++){int randomIndex=len-1-new Random().nextInt(len-i);res[i]=arr[randomIndex];int tmp=arr[randomIndex];arr[randomIndex]=arr[i];arr[i]=tmp;}return res;}}

0 0
原创粉丝点击