尋找將1~N的整數隨機排列的高效方法
我想到的是:先把陣列按照順序初始化,然後隨機從1~N-1取一個位置,把這個位置的值與放在N位置的值交換,然後再隨機從1~N-2取一個,與放在N-1位置的值交換...直到只剩一個,放在那裡不動。最終結果正好是倒序的每次取出的隨機數,但有的數可能會被多次取到。
#include <stdio.h>
#define N 14
#define P {int i;for(i=1;i<=N;i++)printf("%d ",a[i]);printf("\n");}
int main()
{
int i=0;
int a[N+1];
int temp=0;
int j=0;
for(i=1;i<=N;i++) a[i]=i;
P
for(i=1;i<N;i++)
{
j=rand()%(N-i)+1;
temp=a[j];
a[j]=a[N-i+1];
a[N-i+1]=temp;
P
}
return 1;
}
比如:
初始化 1 2 3 4 5
1. 找到1~4的隨機數3,序列變為1 2 [5] 4 [3]
2. 找到1~3的隨機數2,序列變為1 [4] 5 [2] 3
3. 找到1~2的隨機數2,序列變為1 [5] [4] 2 3
其中4這個數就多次被取到。
相關文章
- 生成隨機整數方法隨機
- 如何高效尋找素數
- 實現將10個整數升序排列
- 實現自然數N的全排列
- 生成{1,2,...,n}的排列的演算法-組合數學演算法
- 生成隨機排列隨機
- Python產生20個隨機整數的方法詳解!Python隨機
- 高效產生不重複的隨機數隨機
- 實現一個炫酷的隨機標籤排列效果(顏色隨機,大小隨機,成菱形排列的列表)隨機
- matlab中怎樣隨機生成一個最大值為N的正整數??Matlab隨機
- 隨機範圍小數和隨機範圍整數隨機
- js生成m-n之間的隨機數JS隨機
- 隨機產生0-1之間實數的方法隨機
- matlab之生成不重複的隨機整數Matlab隨機
- python生成隨機數的方法Python隨機
- 高效產生一組不重複的隨機數隨機
- L1-041 尋找250 分數 10
- Golang生成區間隨機整數Golang隨機
- Python如何隨機生成1到100的隨機數?Python隨機
- java 生成一個隨機整數,範圍從 1 到 10Java隨機
- ACM 尋找最大數ACM
- numpy各種生成隨機數的方法隨機
- javascript實現的m到n的隨機數程式碼例項JavaScript隨機
- js生成一定範圍內的隨機整數JS隨機
- 【Algorithm】《劍指offer》面試題32----從1到n整數中1出現的次數Go面試題
- C 語言產生隨機數的方法隨機
- C語言產生隨機數的方法C語言隨機
- dbms_random包呼叫隨機數的方法:random隨機
- LeetCode:尋找丟失的數字LeetCode
- leetcode 287 尋找重複的數LeetCode
- MongoDB隨機查詢返回一條或N條記錄的方法MongoDB隨機
- 3069 求n個整數的和
- MATLAB中如何生成指定範圍的隨機整數向量Matlab隨機
- 連結串列面試題(五)---尋找連結串列的倒數第k個結點O(N)面試題
- 明明的隨機數隨機
- 揭祕Java高效隨機數生成器Java隨機
- Java之獲取隨機數的4種方法Java隨機
- 幾種生成隨機數方法隨機