洗牌算法实现随机排序
实现数组随机排序,其实我们可以根据洗牌算法来实现,跟我们生活中洗牌一样,让我们来学习一下怎么进行排序。一共分为两种方法,换牌,抽牌。让我们看看如何进行排序
1、换牌
逻辑:从一副牌中抽取一张,与最后一张牌进行交换,放到最后证明该牌已经被随机抽选过,而被交换的牌就排在前面,就有机会被继续抽选。
- 随机抽取一张
- 抽取的放置到最后位置
- 最后位置的牌放置在随机抽取的位置
let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12,13,14];
funtion shuffle(ar){
for(let i = arr.length;i>0;i--){
let temRandom = Math.floor(Math.random()*i)
arr[i] = arr[temRandom];
arr[temRandom] = arr[i]
}
return arr
}
shuffle(arr)
2、抽牌
逻辑:从一副牌抽取一张放置一旁,则这幅牌会越抽越少,直至到最后一张。
- 随机抽取一张
- 抽取的牌放置旁边
- 在抽取的那副牌冲除去随机抽取的那张牌
let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12,13,14];
funtion shuffle(ar){
let temp = [];
for(let i = arr.length;i>0;i--){
let temRandom = Math.floor(Math.random()*i)
temp.push(arr[temRandom])
arr.splice(temRandom,1)//抽取一张后,要除去这张牌,然后在剩下的牌中继续抽
}
return temp
}
shuffle(arr)
附:本文用到的JS基础
本文用到数组方法基本介绍
- splice返回被删除的元素,直接修改数组数据,可接受1/2/3个参数
let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12,13,14];
arr.splice(0)//删除索引从0开始的所有数据,即删除所有数据
arr.splice(0)//删除索引从1开始的所有数据,即只保留第一位数据
arr.splice(2,1)//删除索引为2的数据
arr.splice(0,arr.length,5)//删除原数组的数据,并把数据5填充到arr中
- Math.floor() 向下取整
- Math.ceil() 向上取整