該算法每輪從序列可選範圍中隨機選取一個元素放入目標序列中,而後將該元素與序列可選範圍中最後一個元素相交換(若是隨機選中的是序列可選範圍最後的元素,則至關於沒有發生交換),再把序列可選範圍減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; }