该算法每轮从序列可选范围中随机选取一个元素放入目标序列中,而后将该元素与序列可选范围中最后一个元素相交换(若是随机选中的是序列可选范围最后的元素,则至关于没有发生交换),再把序列可选范围减1。重复此过程,直到填满目标序列为止。算法
####目标数组
从[0,9]区间随机生成5个不重复随机数dom
####初始序列spa
0 1 2 3 4 5 6 7 8 9.net
第一轮code
0 1 2 3 4 9 6 7 8 | 5 ---> 5blog
第二轮 0 1 2 3 4 9 8 7 | 6 5 ---> 5 6get
第三轮 0 1 2 3 4 7 8 | 9 6 5 ---> 5 6 9it
第四轮 0 8 2 3 4 7 | 1 9 6 5 ---> 5 6 9 1
第五轮 0 8 2 7 4 | 3 1 9 6 5 ---> 5 6 9 1 3
5 6 9 1 3
java代码:
//生成10个0-9间不重复随机数 static int[] defult = new int[100]; //初始化可选范围 static int range=100; public static void main(String[] args) { //目标数组 int[] targetArray = new int[100]; //初始化默认数组 for(int i=0;i<defult.length;i++) { defult[i]=i; } Random ran = new Random(100); for(int i=0;i<targetArray.length;i++) { int ranNum =ran.nextInt(range); targetArray[i]=defult[ranNum]; swap(ranNum,defult.length-i-1); range--; } for(int i=0;i<targetArray.length;i++) { System.out.println(targetArray[i]); } } //交换 public static void swap(int startPosition,int endPosition) { int temp = defult[startPosition]; defult[startPosition] = defult[endPosition]; defult[endPosition]=temp; }