码迷,mamicode.com
首页 > 编程语言 > 详细

洗牌算法

时间:2015-07-29 22:38:43      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:

牌放到一个数组中,这里采用随机取下标的方式,交换两张牌。

将数组分为两个部分,一个部分为洗好的牌,和没有洗好的牌。从没有洗好的牌中随机选一张和没有洗好的第一张牌进行交换。这样洗好的牌数量加1,没有洗好的牌数量减1

时间复杂度O(n),空间复杂度O(1)

 1 import java.util.Date;
 2 import java.util.Random;
 3 
 4 
 5 /**
 6  * 模拟洗牌
 7  * 洗牌算法的实现
 8  * 随机取下标
 9  * 将牌分为两个部分,0-i为洗好的牌,i+1 - 53为没有洗的牌
10  * i+1 - 53之间产生一个随机数index,交换i+1和index的牌
11  * 时间复杂度O(N),空间复杂度O(1)
12  * @author GXF
13  *
14  */
15 public class MixUpCards {
16     
17     /**
18      * 洗牌
19      * 时间复杂度O(N),空间复杂度O(1)
20      * @param array
21      */
22     public void mixupCards(int array[]){
23         Random random = new Random(new Date().getTime());
24         
25         for(int i = array.length - 1; i > 0; i--){
26             int index = random.nextInt(i);
27             swap(array, i, index);
28         }
29     }
30     
31     /**
32      * 交换数组元素
33      * @param array
34      * @param i
35      * @param j
36      */
37     public void swap(int array[], int i, int j){
38         int temp = array[i];
39         array[i] = array[j];
40         array[j] = temp;
41     }
42 
43 }

分析算法需要从空间复杂度和时间复杂度进行分析,这样算法性能才具有可比性

洗牌算法

标签:

原文地址:http://www.cnblogs.com/luckygxf/p/4687556.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!