之前有一次寫程式,需要用到乙個生成亂序數列的演算法(就是把乙個數列打亂),網上搜了一下演算法,大約是下面這樣的(c#):
system.random random = new system.random();
listcodelist = new list();
listrandomlist = new list();
for (int i = 1; i <= num; i++)
foreach (int item in codelist)//生成亂序數列
random.next(i)返回小於i的最大非負整數
這個演算法的原理是每次從有序陣列裡取出乙個數,插入到目標陣列的隨機位置,實現陣列的打亂
但是這樣的演算法實際執行起來是有問題的,有序陣列裡的第乙個數在打亂後的陣列裡永遠都排在最後乙個,並沒有被完全打亂。仔細看這個演算法,是每次從有序陣列codelist裡取出乙個數,插入randomlist的隨機位置,但random.next(randomlist.count)返回的是小於count的數,導致永遠不會插入到隊伍的末尾,於是,第乙個被插入的數永遠被排在了末尾
所以修改起來也很簡單了
system.random random = new system.random();
listcodelist = new list();
listrandomlist = new list();
for (int i = 1; i <= num; i++)
foreach (int item in codelist)//生成亂序數列
亂序陣列的演算法
在做開發的時候,遇到了乙個問題,比如說我想要乙個陣列,比如說空間大小為10,裡面的數是1 10,不能重複。比如 8,9,2,4,5,7,1,3,6,10.順序都是亂的,且是1 10,當時想了一會,感覺有點難實現,後來想了幾分鐘,居然實現了,後來再想的時候,突然不回了,怎麼也想不出來了,後來看自己的 ...
亂序陣列或字元最小交換次數
如果是要求為只能交換相鄰的兩個元素,使陣列或者是字串間有序 思路 計算陣列中或者是字串間的中元素的逆序數.如 2 1 3 4 此時逆序數為 1 最小交換次數就為1 3 2 1 4 此時逆序數為 3 最小交換次數就為3 include include include include include i...
陣列亂序 陣列去重 filter實現
陣列亂序 function shuffle arr 陣列去重 function removedup arr 3.存在就過 return result 用物件去重,不推薦 1 和 1 會重複 function removedup arr 1.遍歷arr,存進hashmap,後續比較看是否存在 for ...