如何在C++中创建随机数组

Nic*_*ick 2 c++ visual-c++

而不是ELEMENTS是25有一种方法可以随机生成大量的元素...... 10000,100000甚至1000000个元素,然后使用我的插入排序算法.我正在尝试使用大量元素并使用插入排序将它们按顺序排列,然后也按相反的顺序排列.接下来,我使用time.h文件中的clock()来计算每个算法的运行时间.我试图用大量数字进行测试.

#define ELEMENTS 25

void insertion_sort(int x[],int length);
void insertion_sort_reverse(int x[],int length);

int main()
{
  clock_t tStart = clock();
  int B[ELEMENTS]={4,2,5,6,1,3,17,14,67,45,32,66,88,
               78,69,92,93,21,25,23,71,61,59,60,30};
  int x;

  cout<<"Not Sorted: "<<endl;
  for(x=0;x<ELEMENTS;x++)
       cout<<B[x]<<endl;

   insertion_sort(B,ELEMENTS);
   cout <<"Sorted Normal: "<<endl;
  for(x=0;x<ELEMENTS;x++)
       cout<< B[x] <<endl;

  insertion_sort_reverse(B,ELEMENTS);
  cout <<"Sorted Reverse: "<<endl;
  for(x=0;x<ELEMENTS;x++)
       cout<< B[x] <<endl;

  double seconds = clock() / double(CLK_TCK);
  cout << "This program has been running for " << seconds << " seconds." << endl;
  system("pause");
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

bam*_*s53 14

#include <random>     // mt19937 and uniform_int_distribution
#include <algorithm>  // generate
#include <vector>     // vector
#include <iterator>   // begin, end, and ostream_iterator
#include <functional> // bind
#include <iostream>   // cout

std::vector<int> create_random_data(int n) {
  std::random_device r;
  std::seed_seq      seed{r(), r(), r(), r(), r(), r(), r(), r()};
  std::mt19937       eng(seed); // a source of random data

  std::uniform_int_distribution<int> dist;
  std::vector<int> v(n);

  generate(begin(v), end(v), bind(dist, eng));
  return v;
}

int main() {
  auto random_data = create_random_data(100000);

  std::cout << "unsorted: ";
  copy(begin(random_data), end(random_data),
       std::ostream_iterator<int>(std::cout, "\n"));
}
Run Code Online (Sandbox Code Playgroud)

generate是一种通用算法,使用仿函数生成的值填充范围.在这种情况下,我们为它提供了一个函子,它使用我们的随机数据源来生成随机数,我们提供了一个与容器相对应的范围,我们可以在generate用数据填充之后使用它.

我们使用std::mt19937std::uniform_int_distribution标准C++设施的C++ 11(和VS2010可用),创建随机数,而不是旧的std::rand(),并std::srand()因为较新的方法更容易正确使用,更高的质量和更灵活.


如果您使用的是VS2012或更高版本,则可以使用C++ 11时间库.

#include <chrono>

int main() {
  using std::chrono::high_resolution_clock;
  using std::chrono::duration_cast;
  using std::chrono::nanoseconds;

  auto start = high_resolution_clock::now();

  // ...

  auto end = high_resolution_clock::now();

  std::cout << duration_cast<nanoseconds>(end - start).count() << "ns\n";
}
Run Code Online (Sandbox Code Playgroud)

  • @Mahesh,*它有一个很长的周期 2^19937 − 1.* - 来自维基百科关于 Mersenne Twister 的文章;) (2认同)