如何创建一个随机数组(元素是1到N-1,不重复)

摘要###(1)创建一个随机数组A[N],其元素分布为1到N-1,且不能重复.
(2)有几种算法:
{1}用一个附加数组used[N],每生生成一个A[i],令used[i] = 1;在余下的计算中,每次都测试 if used[i] == 1,以避免重复.
{2}直接生成1-N-1,然后随机交换A[i],A[k],k通过i随机生成。
(3)分析算法:对应{1},算法1花费的时间界为 i=0(1/Pi) ,其中Pi = i/1(成功的概率),O(N^2)量级.
算法2进行了O(N)次,效率明显高.

#include "stdafx.h"
#include "stdlib.h"
#include "time.h"
#define N 500000
void swap(int *A,int *B)
{
    int temp;
    temp = *B;
    *B  = *A;
    *A = temp;

}
int _tmain(int argc, _TCHAR* argv[])
{
    clock_t start,finish;
    int A[N] = {0};
    start = clock();
    for (int i = 0;i<= N-1;i++)
        A[i] = i+1;
    for (int i = 0;i<=N-1;i++)
    {

        srand((int)time(0));
        int k = (rand())%(i+1);
        swap(&A[i],&A[k]);
    }
    finish = clock();
    printf("The process use %f seconds", (double)(finish - start)/CLOCKS_PER_SEC);
    system("pause");
    return 0;
}

“`

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
创建一个包含随机元素数组(集合)在Python中,您可以使用`random.sample()`方法来选取特定数量的独特元素。此方法适用于从一个已存在的序列中提取元素而不重复。 假设我们有一个序列 `seq` 包含一系列数值: ```python seq = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] ``` 要从中生成一个由4个独特随机元素组成的数组,可以执行以下操作: ```python import random # 定义序列并设置所需随机元素的数量 seq = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] n = 4 # 使用random.sample生成包含n个不同元素随机子集 sampled_elements = random.sample(seq, n) print(sampled_elements) ``` 这将会输出类似于 `[3, 1, 7, 9]` 的结果,但每次运行可能会不同,因为它是随机选择的。 关于您提到的其他生成随机数字的方法,它们各自用于生成不同类型的随机值: 1. **`random.randint(a, b)`**:生成一个在闭区间 `[a, b]` 内的随机整数。 ```python result = random.randint(1, 10) ``` 2. **`random.random()`**:生成一个在区间 `(0.0, 1.0)` 内的随机浮点数。 ```python result = random.random() ``` 3. **`random.uniform(a, b)`**:生成一个在闭区间 `[a, b]` 内的随机浮点数。 ```python result = random.uniform(1.0, 10.0) ``` 4. **`random.randrange(start, stop[, step])`**:生成一个指定步长范围内的随机整数。 ```python result = random.randrange(1, 10, 2) # 生成奇数范围内的随机数 ``` 请注意,为了确保上述代码片段能够正常工作,记得导入相应的 `random` 模块: ```python from random import * ``` --- ## 相关问题: 1. 如何利用`random.shuffle()`对一个列表进行随机排列? 2. `random.choice()`与`random.sample()`有何区别? 3. 怎样生成一个指定长度的全随机字符数组
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值