首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

erlang乱序一个List的议案

2013-03-21 
erlang乱序一个List的方案do2(L) -do2(L,[]).do2([],L) -Ldo2(L1,L2) -%io:format(L1~wL2~w~n,[L1

erlang乱序一个List的方案

do2(L) -> do2(L,[]).do2([],L) -> L;do2(L1,L2) -> %io:format("L1=~w L2=~w~n",[L1,L2]), Len = length(L1), if Len > 1 -> NL = lists:split(random:uniform(Len-1), L1), {[H1|T1],[H2|T2]} = NL, NL2 = lists:flatten([T1],[H1|T2]), L11 = lists:append(L2,[H2]), do2(NL2, L11); true -> do2([],lists:append(L2,L1)) end.其结果为:128> c(shuffle).{ok,shuffle}129> shuffle:do2(lists:seq(0,9)).[9,2,5,1,8,0,7,3,6,4]130> shuffle:do2(lists:seq(0,9)).[8,3,6,5,7,4,9,0,2,1]131> shuffle:do2(lists:seq(0,9)).[5,3,7,8,1,9,0,6,2,4]132> shuffle:do2(lists:seq(0,9)).[3,0,5,2,1,6,8,4,9,7]133>

有几点值得思考的,关于这两种方案,是否是真正的洗牌算法。每个数字出现在某个位置是否等概率呢。

还有其它的方法不,欢迎探讨。






热点排行