建立乙個不重複的隨機列表

2021-06-04 06:05:29 字數 1416 閱讀 3363

隨機列表是我們常用的資料結構,我們一般會使用隨機函式srand(),rand()取隨機數來生成乙個隨機列表。

但問題是我們希望隨機列表不要在乙個迴圈內多次的重複同乙個index,並且每乙個index都能被索引到。

請看下面乙個例子:

void createradomlist******(int *pbuf, int length)

}

這個例子通過乙個迴圈初始化了乙個列表,並且將值通過「%length」將隨機數限定在範圍內,但是結果裡常會有重複或者隨機不到的現象,下面的在我本機上的列印結果:

print list ...

1 1 2 2

print list ...

0 0 2 3

print list ...

1 0 1 0

這樣的結果不是我們最理想的。

下面介紹乙個生成不重複隨機列表的方法,是通過隨機放置迴圈的索引值來生成的隨機列表,在上圖的**中,我們知道迴圈中使用的『i』是永遠不會重複的,通過rand將每乙個迴圈中的『i』隨機放置到pbuf的某乙個位置,我們就能得到乙個不重複的隨機列表了。

我們要解決一另個問題,避免pbuf被隨機到的位置相同,利用在建立的過程中剩餘的資料個數,我們能夠查詢到剩餘資料的位置,再放置「迴圈索引值」就可以了,請參考下面的**實現。

void createradomlist(int *pbuf, int length)

/* seed */

seed = rand();

srand(seed+&length);

for(index = 0; index < length; index ++)

if(indexposition == 0)

}pbuf[j] = index;

} }

下面是我本機的輸出:

create radom list ....

print list ...

0 3 2 1

create radom list ....

print list ...

2 0 3 1

create radom list ....

print list ...

2 0 1 3

create radom list ....

print list ...

0 1 2 3

create radom list ....

print list ...

2 3 0 1

create radom list ....

print list ...

0 2 3 1

完美的隨機列表就這麼簡單,再也不會重複了

Python 生成乙個不重複隨機list(無放回)

在乙個範圍內,生成乙個元素數量固定的隨機不重複list.使用for迴圈逐一對生成每個值進行判斷,在有重複值的時候,不會被被新增.在需要生成多個隨機值的時候,容易出現輸出的結果比較少的情況.比如下面需要生成20個隨機值,可是一般輸出的都不到20.import random all num 100 a ...

PHP高效生成乙個不重複隨機數

array unique rand int min,int max,int num 生成一定數量的不重複隨機數 min 和 max 指定隨機數的範圍 num 指定生成數量 function unique rand min max num 為陣列賦予新的鍵名 shuffle return return...

Qt建立不重複隨機數

該 建立乙個隨機數的類。建構函式有兩個 1 引數為乙個整形數,如傳入300,則產生0 299的隨機數,其中隨機數不重複。2 引數為qlist,根據這個list直接初始化。標頭檔案 ifndef rand num define rand num include class randnum endif ...