鲥鱼丸 2021-09-21 17:56 采纳率: 66.7%
浏览 34
已结题

测试了多台电脑,运行这个进程居然需要半分钟之久,能帮我看看为什么吗

我实在想不通,这明明10ms以内就能完成的啊?


#include <iostream>
#include <ctime>

using namespace std;

int randInt(int l, int r) {
    srand(time(0));
    return rand() % (r - l + 1) + l;//从l...r之间任取一个数
}

bool check(int index, int arr[], int target) {
    for (int i = 0; i < index; ++i) {
        if (target == arr[i]) {
            return true;
        }
    }
    return false;
}

void algorithm1(int arr[], int size, int rangeLeft, int rangeRight) {
    int random;
    for (int i = 0; i < size; ++i) {
        random = randInt(rangeLeft, rangeRight);
        while (check(i, arr, random)) {
            random = randInt(rangeLeft, rangeRight);
        }
        arr[i] = random;
    }
}

void algorithm2(int arr[], int size, int rangeLeft, int rangeRight) {
    bool *used = new bool[rangeRight + 1];
    for (int i = 0; i < rangeRight + 1; ++i) {
        used[i] = false;
    }
    int random;
    for (int j = 0; j < size; ++j) {
        random = randInt(rangeLeft, rangeRight);
        while (used[random]) {
            random = randInt(rangeLeft, rangeRight);
        }
        used[random] = true;
        arr[j] = random;
    }
    delete[]used;
}

void algorithm3(int arr[], int size) {
    for (int j = 0; j < size; ++j) {
        arr[j] = j + 1;
    }
    for (int i = 0; i < size; ++i) {
        swap(arr[i], arr[randInt(0, i)]);
    }
}

int main() {
    int arr[10] = {0};
    algorithm1(arr, 10, 1, 10);
    //algorithm3(arr, 10);
    for (int i = 0; i < 10; ++i) {
        cout << arr[i] << endl;
    }
}
  • 写回答

3条回答 默认 最新

  • orange4reg 2021-09-21 18:41
    关注

    耗时间的并不是srand(time(0));,而是超短时间内srand(time(0)),再rand的话,得到的随机数是相同的,因为你去重需要不断的重复遍历数组,因此才浪费的时间。这个种子,隔一段时间用一次就可以了,间隔太短的话,生成的随机数反而不随机,你可以看看它生成的原理,这个函数没有封装起来,你可以直接查看。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 9月29日
  • 已采纳回答 9月21日
  • 创建了问题 9月21日

悬赏问题

  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算