您的位置:首页 > 编程语言 > Go语言

《Algorithms算法》笔记:元素排序(3)——洗牌算法

2016-04-06 23:16 615 查看

《Algorithms算法》笔记:元素排序(3)——洗牌算法

Algorithms算法笔记元素排序3洗牌算法

洗牌算法

排序洗牌

Knuth洗牌

Knuth洗牌代码

洗牌算法


洗牌的思想很简单,就是像洗扑克牌一样,对一组数据进行随机打乱,这个算法在很多应用里都非常有用,特别是对于后面需要介绍的快排来说,这个算法直接影响了快排的效率。


洗牌的算法这里提了2种

排序洗牌

思想很简单,先对每个元素生成一个随机数,然后对这些随机数进行排序

排序前



排序后



Knuth洗牌

一个更简单的算法,不用sort,每次产生一个[0,i]的随机数r,然后交换a[i]和a[r],这个是个线性时间算法。



Knuth洗牌代码

public class StdRandom
{
...
public static void shuffle(Object[] a)
{
int N = a.length;
for (int i = 0; i < N; i++)
{
int r = StdRandom.uniform(i + 1);  //<<--[0,i]
exch(a, i, r);
}
}
}

注:洗牌的最佳算法是用硬件随机数生成器

基本观点:洗一副牌是复杂的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: