《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); } } }
注:洗牌的最佳算法是用硬件随机数生成器
基本观点:洗一副牌是复杂的
相关文章推荐
- 《Algorithm算法》笔记:元素排序(2)——希尔排序
- 《Algorithms算法》笔记:元素排序(1)——简单排序
- Golang输出颜色
- Django Start
- zoj 1073 Round and Round We Go
- 愉快的logo设计
- Go语言中Path包用法
- zoj 1855 Google Map 分型递归
- Manacher's ALGORITHM: O(n)时间求字符串的最长回文子串
- setVisibility 中visible invisible 和gone的区别
- django 分页(2) 使用类 页码显示
- golang 自定义封包协议(转的)
- Django-admin模块
- GO int64转int32
- 更正给mongo3.x加上认证功能
- 修改golang最大内存限制
- 关于go的不爽
- Go语言”奇怪用法“有哪些?
- django 分页
- 20 Tips To Use Google Search Efficiently