陣列亂序指的將陣列的每乙個元素隨機打亂,並且對於每乙個元素而言,它被放置到每乙個位置的概率都相等。
有很多演算法都能實現這個要求,其中knuth-durstenfeld shuffle演算法效能較高,其時間複雜度為o(n),空間複雜度為o(1),實現也簡單一些,這裡給出演算法的原理以及c++程式和c#程式。
其演算法原理具體如下:
已知乙個陣列a,元素個數為n,其索引為0~n-1;
令i = n - 1;
生成隨機數index,區間為[0, i];
交換a[i]與a[index];
如果i > 0,則i = i - 1並跳轉到步驟3;
結束。
#include
#include
template
<
class
t, size_t len>
void
shuffle
(t (
&a)[len])}
intmain()
;shuffle
(a);
return0;
}
public
static
void
shuffle
<
t>
(t a)
}public
static
void
main()
;shuffle
(a);
}
function
shuffle
(a)}
a =[1,
2,3,
4,5]
;shuffle
(a);
亂序陣列的演算法
在做開發的時候,遇到了乙個問題,比如說我想要乙個陣列,比如說空間大小為10,裡面的數是1 10,不能重複。比如 8,9,2,4,5,7,1,3,6,10.順序都是亂的,且是1 10,當時想了一會,感覺有點難實現,後來想了幾分鐘,居然實現了,後來再想的時候,突然不回了,怎麼也想不出來了,後來看自己的 ...
golang 陣列 slice 亂序
陣列亂序 方法1.sliceoutoforder 選定隨機數r 將下標r和下邊i交換,i 就是和當前最後一位交換 方法2.rand.perm 陣列長度 將原陣列下標按照隨機出來的資料賦值給另一陣列 package main import fmt import math rand import tim...
js陣列排序 亂序總結
arr.sort 預設公升序,可接受兩個引數,返回值為正數則交換位置 公升序,返回值為 1 arr.sort a,b 降序,返回值為1 arr.sort a,b 物件中根據屬性值排序 var arr function compare property console.log arr.sort com...