0 public static void randomDeliverCard(int length) {
1 int[] card1 = new int[length]; //存储未洗的牌
2 int[] result = new int[length]; //存储洗过的牌
3
4 for (int i = 0; i < card1.length; i++)
5 card1[i] = i + 1;
6 for (int i = 0; i < card1.length; i++) {
7 System.out.print(card1[i] + "/t");
8 if ((i + 1) % 9 == 0)
9 System.out.println();
10 }
11
12 Random rand = new Random(System.currentTimeMillis());
13
14 int rand_index = 0;
15 int remain = card1.length;
16
17 /*
18 * 用未洗的牌的末尾一张替换掉选中的那张,有两种情况:
19 * 1.选中的那张是末尾一张牌,remain--直接过滤那张牌
20 * 2.选中的那张不是末尾一张牌,通过替换过滤掉选中那张牌
21 */
22 for (int i = 0; i < card1.length; i++) {
23 rand_index = Math.abs(rand.nextInt() % remain); //产生随机数0<=rand_index <=remain
24 result[i] = card1[rand_index]; //随机从未洗的牌中选一张存入洗过的牌中
25 card1[rand_index] = card1[remain - 1]; //用未洗的牌的末尾一张替换掉选中的那张
26 remain--; //过滤已经选中的那张牌
27 }
28
29 System.out.println("/n/n");
30 for (int i = 0; i < result.length; i++) {
31 System.out.print(result[i] + "/t");
32 if ((i + 1) % 10 == 0)
33 System.out.println();
34 }
35 }
一个高效的洗牌算法分析
最新推荐文章于 2022-04-29 14:33:24 发布