百度面试题:不使用随机数的洗牌算法解决方案
百度面试题:不使用随机数的洗牌算法
RT,网上流传了各种洗牌算法,基本上都是建立在随机数的基础之上的。
前段时间去百度实习面试,二面问了一个洗牌算法,不允许使用随机数,请问如何实现?至今没有想到一个合理的算法。。。。
多谢各位爱思考的牛人参与讨论。
------解决方案--------------------
个人的看法:冒泡排序是采用比较大小的方法排序,比较a[i]与a[j]的大小,然后交换位置。
如果把这个比较大小的逻辑更改一下,就可以排列出不同的结果。
比如给定一个常数 int N = 100 比较 a[i] % N 与 a[j] % N的大小,就可以得出一个比较奇怪的序列。
每次运行洗牌程序时,N取不同的数字,第一次100,下一次可以101, 102等等,就可以得到不同的洗牌结果了
RT,网上流传了各种洗牌算法,基本上都是建立在随机数的基础之上的。
前段时间去百度实习面试,二面问了一个洗牌算法,不允许使用随机数,请问如何实现?至今没有想到一个合理的算法。。。。
多谢各位爱思考的牛人参与讨论。
------解决方案--------------------
个人的看法:冒泡排序是采用比较大小的方法排序,比较a[i]与a[j]的大小,然后交换位置。
如果把这个比较大小的逻辑更改一下,就可以排列出不同的结果。
比如给定一个常数 int N = 100 比较 a[i] % N 与 a[j] % N的大小,就可以得出一个比较奇怪的序列。
每次运行洗牌程序时,N取不同的数字,第一次100,下一次可以101, 102等等,就可以得到不同的洗牌结果了