方法描述:
1. 随机产生一个1-n的数x,做为第一张牌。
2. 随机产生一个1-(n-i)的数y,取第y个没有被抽出来的作为第i张牌。(i=2,3,4,5...54)
这种算法的复杂度为O(N^2),因为计算每个随机数的牌号平均要执行(N/2)次比较。
import java.util.ArrayList;
import java.util.Random;
public class ShuffleTest {
static final int NUM = 54;
static void ShuffleFunction(ArrayList<Integer> list) {
Random r = new Random();
ArrayList<Integer> newlist = new ArrayList<Integer>();
for (int i=NUM; i>0; i--) {
int index = r.nextInt(i);
newlist.add(list.get(index));
list.remove(index);
}
list.addAll(newlist);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList<Integer> arrlist = new ArrayList<Integer>();
for(int i=0; i<NUM; i++) {
arrlist.add(i+1);
}
System.out.println(arrlist);
ShuffleFunction(arrlist);
System.out.println(arrlist);
}
}