您的位置:首页 > 其它

洗牌算法

2015-07-29 21:56 302 查看
牌放到一个数组中,这里采用随机取下标的方式,交换两张牌。

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

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

import java.util.Date;
import java.util.Random;

/**
* 模拟洗牌
* 洗牌算法的实现
* 随机取下标
* 将牌分为两个部分,0-i为洗好的牌,i+1 - 53为没有洗的牌
* i+1 - 53之间产生一个随机数index,交换i+1和index的牌
* 时间复杂度O(N),空间复杂度O(1)
* @author GXF
*
*/
public class MixUpCards {

/**
* 洗牌
* 时间复杂度O(N),空间复杂度O(1)
* @param array
*/
public void mixupCards(int array[]){
Random random = new Random(new Date().getTime());

for(int i = array.length - 1; i > 0; i--){
int index = random.nextInt(i);
swap(array, i, index);
}
}

/**
* 交换数组元素
* @param array
* @param i
* @param j
*/
public void swap(int array[], int i, int j){
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}

}


分析算法需要从空间复杂度和时间复杂度进行分析,这样算法性能才具有可比性
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: